package game import ( "fmt" "server/GoUtil" "server/MergeConst" "server/cron" "server/db" "server/gamedata" "server/msg" "strconv" "strings" "time" "google.golang.org/protobuf/proto" ) type PlayerActiveData struct { *PlayerData WeekCronID cron.EntryID Mcron *cron.Cron Type int32 MisDirty bool MActType int MActiveID int32 } func (p *PlayerActiveData) DeleteOutlineActive(deleteList []int32, tableName string) { sqlStr := "DELETE FROM " + tableName + " WHERE ActiveID = ?" for i := 0; i < len(deleteList); i++ { result, err := db.SqlDb.Exec(sqlStr, deleteList[i]) if err != nil { fmt.Printf("exec failed, err:%v\n", err) return } affectedRows, err := result.RowsAffected() if err != nil { fmt.Printf("get affected failed, err:%v\n", err) return } fmt.Printf("delete data success, affected rows:%d\n", affectedRows) } } func (p *PlayerActiveData) OpenNewLimitActivity(args []interface{}) { if p.MActType != args[3].(int) { return } p.MisDirty = true } func (p *PlayerActiveData) ClearData() bool { GoUtil.RemoveEvent(MergeConst.OpenNewLimitActivity, p.OpenNewLimitActivity, p) return true } func (p *PlayerActiveData) Reconnect(b bool) { GoUtil.RemoveEvent(MergeConst.OpenNewLimitActivity, p.OpenNewLimitActivity, p) GoUtil.RegisterEvent(MergeConst.OpenNewLimitActivity, p.OpenNewLimitActivity, p) } // //////////////////////// type PlayerPassportData struct { *PlayerActiveData Data msg.ResLimitPassportDetail MsqlStruck []db.SqlLimitPassportStruct MActType int } func (p *PlayerPassportData) LoadDataFromDB(dwUin interface{}) bool { sqlStr := "SELECT * FROM t_player_LimitPassport WHERE dwUin = ?" p.MsqlStruck = []db.SqlLimitPassportStruct{} if err := db.SqlDb.Select(&p.MsqlStruck, sqlStr, dwUin.(int32)); err != nil { p.IsHaveDataDb = false } else { p.IsHaveDataDb = true } p.Data.DwUin = dwUin.(int32) deleteList := []int{} dlist := []int32{} tempList := []db.SqlLimitPassportStruct{} curtime := time.Now().Unix() startIndex := 0 for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if item.StartSvrTime > int32(curtime) || item.EndSvrTime < int32(curtime) { deleteList = append(deleteList, i) } } for i := 0; i < len(deleteList); i++ { curIndex := deleteList[i] if curIndex == startIndex { startIndex = startIndex + 1 continue } tempList = append(tempList, p.MsqlStruck[startIndex:curIndex]...) startIndex = curIndex + 1 } if startIndex <= len(p.MsqlStruck)-1 { tempList = append(tempList, p.MsqlStruck[startIndex:]...) } for i := 0; i < len(deleteList); i++ { dlist = append(dlist, p.MsqlStruck[deleteList[i]].ActiveID) } if len(dlist) > 0 { p.DeleteOutlineActive(dlist, "t_player_LimitPassport") } p.MsqlStruck = tempList p.MActType = 1 p.Reconnect(false) return true } func (p *PlayerPassportData) CloseNewLimitActivity(args []interface{}) { record := args[0].(*gamedata.ActivityRecord) if record.Type != p.MActType { return } notify := &msg.NotifyLimitedTimeActiveEnd{} notify.DwUin = p.M_Player.M_DwUin notify.MActiveList = []*msg.LimitedTimeEndStruct{} for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if int(item.ConfigActId) == record.Id { msg := &msg.LimitedTimeEndStruct{} msg.ActiveID = item.ActiveID msg.Type = int32(record.Type) notify.MActiveList = append(notify.MActiveList, msg) } } p.MisDirty = true agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyLimitedTimeActiveEnd", data) } func (p *PlayerPassportData) Reconnect(b bool) { GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) GoUtil.RegisterEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) p.PlayerActiveData.Reconnect(b) } func (p *PlayerPassportData) FindDbSt(activeId int32) *db.SqlLimitPassportStruct { for i := 0; i < len(p.MsqlStruck); i++ { if p.MsqlStruck[i].ActiveID == activeId { return &p.MsqlStruck[i] } } return nil } func (p *PlayerPassportData) ResLimitPassportDetail(buf []byte) { req := &msg.ReqLimitPassportDetail{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResLimitPassportDetail{} if st != nil { res.ActiveID = st.ActiveID res.CurFreeLv = st.CurFreeLv res.CurPayLv = st.CurPayLv res.CurSvrTime = int32(time.Now().Unix()) res.StartSvrTime = st.StartSvrTime res.EndSvrTime = st.EndSvrTime res.IsPay = st.IsPay res.DwUin = p.M_Player.M_DwUin res.Star = st.Star res.Status = st.Status res.ResultCode = 0 } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResLimitPassportDetail", data) } func (p *PlayerPassportData) ResGetLimitPassportReward(buf []byte) { req := &msg.ReqGetLimitPassportReward{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResGetLimitPassportReward{} if st != nil { res.ActiveID = st.ActiveID res.DwUin = p.M_Player.M_DwUin res.FreeOrPay = req.FreeOrPay res.ReqLv = req.ReqLv res.ResultCode = 0 if req.FreeOrPay == 1 { st.CurFreeLv = req.ReqLv } if req.FreeOrPay == 2 { st.CurPayLv = req.ReqLv } } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResGetLimitPassportReward", data) } func (p *PlayerPassportData) ResPayPassport(buf []byte) { req := &msg.ReqPayPassport{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResPayPassport{} if st != nil { res.DwUin = p.M_Player.M_DwUin st.IsPay = 1 res.ResultCode = 0 res.ActiveID = req.ActiveID } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResPayPassport", data) } func (p *PlayerPassportData) ResActiveAddStar(buf []byte) { req := &msg.ReqActiveAddStar{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResActiveAddStar{} if st != nil { st.Star = req.AddCnt + st.Star res.AllCnt = st.Star res.ActiveID = req.ActiveID } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResActiveAddStar", data) } func (p *PlayerPassportData) SaveDataFromDB(Key interface{}) bool { for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] db.FormatAllMemUpdateDb(&item, "t_player_LimitPassport", "ActiveID") } return true } func (p *PlayerPassportData) ClearData() bool { p.SaveDataFromDB("") GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) p.PlayerActiveData.ClearData() return true } //////////////////////// type PlayerPromotionData struct { *PlayerActiveData Data msg.ResLimitPassportDetail MsqlStruck []db.SqlLimitPromotionStruct MActType int } func (p *PlayerPromotionData) LoadDataFromDB(dwUin interface{}) bool { sqlStr := "SELECT * FROM t_player_LimitPromotion WHERE dwUin = ?" p.MsqlStruck = []db.SqlLimitPromotionStruct{} if err := db.SqlDb.Select(&p.MsqlStruck, sqlStr, dwUin.(int32)); err != nil { p.IsHaveDataDb = false } else { p.IsHaveDataDb = true } p.Data.DwUin = dwUin.(int32) deleteList := []int{} dlist := []int32{} tempList := []db.SqlLimitPromotionStruct{} curtime := time.Now().Unix() startIndex := 0 for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if item.StartSvrTime > int32(curtime) || item.EndSvrTime < int32(curtime) { deleteList = append(deleteList, i) } } for i := 0; i < len(deleteList); i++ { curIndex := deleteList[i] if curIndex == startIndex { startIndex = startIndex + 1 continue } tempList = append(tempList, p.MsqlStruck[startIndex:curIndex]...) startIndex = curIndex + 1 } if startIndex <= len(p.MsqlStruck)-1 { tempList = append(tempList, p.MsqlStruck[startIndex:]...) } for i := 0; i < len(deleteList); i++ { dlist = append(dlist, p.MsqlStruck[deleteList[i]].ActiveID) } if len(dlist) > 0 { p.DeleteOutlineActive(dlist, "t_player_LimitPromotion") } p.MActType = 2 p.MsqlStruck = tempList p.Reconnect(false) return true } func (p *PlayerPromotionData) CloseNewLimitActivity(args []interface{}) { record := args[0].(*gamedata.ActivityRecord) if record.Type != p.MActType { return } notify := &msg.NotifyLimitedTimeActiveEnd{} notify.DwUin = p.M_Player.M_DwUin notify.MActiveList = []*msg.LimitedTimeEndStruct{} for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if int(item.ConfigActId) == record.Id { msg := &msg.LimitedTimeEndStruct{} msg.ActiveID = item.ActiveID msg.Type = int32(record.Type) notify.MActiveList = append(notify.MActiveList, msg) } } p.MisDirty = true agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyLimitedTimeActiveEnd", data) } func (p *PlayerPromotionData) Reconnect(b bool) { GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) GoUtil.RegisterEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) p.PlayerActiveData.Reconnect(b) } func (p *PlayerPromotionData) FindDbSt(activeId int32) *db.SqlLimitPromotionStruct { for i := 0; i < len(p.MsqlStruck); i++ { if p.MsqlStruck[i].ActiveID == activeId { return &p.MsqlStruck[i] } } return nil } func (p *PlayerPromotionData) ResPromotionDetail(buf []byte) { req := &msg.ReqPromotionDetail{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResPromotionDetail{} if st != nil { res.ActiveID = st.ActiveID res.CurSvrTime = int32(time.Now().Unix()) res.StartSvrTime = st.StartSvrTime res.EndSvrTime = st.EndSvrTime res.IsPay = st.IsPay res.DwUin = p.M_Player.M_DwUin res.ResultCode = 0 } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResPromotionDetail", data) } func (p *PlayerPromotionData) ResBuyLimitPromotionReward(buf []byte) { req := &msg.ReqBuyLimitPromotionReward{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResBuyLimitPromotionReward{} if st != nil { res.ActiveID = st.ActiveID res.DwUin = p.M_Player.M_DwUin st.IsPay = 1 res.ResultCode = 0 } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResBuyLimitPromotionReward", data) } func (p *PlayerPromotionData) ClearData() bool { p.SaveDataFromDB("") GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) p.PlayerActiveData.ClearData() return true } func (p *PlayerPromotionData) SaveDataFromDB(Key interface{}) bool { for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] db.FormatAllMemUpdateDb(&item, "t_player_LimitPromotion", "ActiveID") } return true } //////////////////////// //////////////////////// type Player7DayLoginData struct { *PlayerActiveData Data msg.ResLimitPassportDetail MsqlStruck []db.SqlSevenDayLoginStruct } func (p *Player7DayLoginData) LoadDataFromDB(dwUin interface{}) bool { sqlStr := "SELECT * FROM t_player_Limit7DayLogin WHERE dwUin = ?" p.MsqlStruck = []db.SqlSevenDayLoginStruct{} if err := db.SqlDb.Select(&p.MsqlStruck, sqlStr, dwUin.(int32)); err != nil { p.IsHaveDataDb = false } else { p.IsHaveDataDb = true } p.Data.DwUin = dwUin.(int32) deleteList := []int{} dlist := []int32{} tempList := []db.SqlSevenDayLoginStruct{} curtime := time.Now().Unix() startIndex := 0 for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if item.StartSvrTime > int32(curtime) || item.EndSvrTime < int32(curtime) { deleteList = append(deleteList, i) } } for i := 0; i < len(deleteList); i++ { curIndex := deleteList[i] if curIndex == startIndex { startIndex = startIndex + 1 continue } tempList = append(tempList, p.MsqlStruck[startIndex:curIndex]...) startIndex = curIndex + 1 } if startIndex <= len(p.MsqlStruck)-1 { tempList = append(tempList, p.MsqlStruck[startIndex:]...) } for i := 0; i < len(deleteList); i++ { dlist = append(dlist, p.MsqlStruck[deleteList[i]].ActiveID) } if len(dlist) > 0 { p.DeleteOutlineActive(dlist, "t_player_Limit7DayLogin") } p.MsqlStruck = tempList p.Reconnect(false) return true } func (p *Player7DayLoginData) CloseNewLimitActivity(args []interface{}) { record := args[0].(*gamedata.ActivityRecord) if record.Type != p.MActType { return } notify := &msg.NotifyLimitedTimeActiveEnd{} notify.DwUin = p.M_Player.M_DwUin notify.MActiveList = []*msg.LimitedTimeEndStruct{} for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if int(item.ConfigActId) == record.Id { msg := &msg.LimitedTimeEndStruct{} msg.ActiveID = item.ActiveID msg.Type = int32(record.Type) notify.MActiveList = append(notify.MActiveList, msg) } } p.MisDirty = true agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyLimitedTimeActiveEnd", data) } func (p *Player7DayLoginData) Reconnect(b bool) { GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) GoUtil.RegisterEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) GoUtil.RemoveEvent(MergeConst.Notify_Daily_Renew, p.NotifyDailyRenew7Day, p) GoUtil.RegisterEvent(MergeConst.Notify_Daily_Renew, p.NotifyDailyRenew7Day, p) p.PlayerActiveData.Reconnect(b) } func (p *Player7DayLoginData) NotifyDailyRenew7Day(param []interface{}) { // p.Data.RenewTime = int32(param[0].(int64)) // for k := range p.Data.MEmitUnlockData { // p.Data.MEmitUnlockData[k] = 0 // } p.NotifyDailyRenew7Dayfunc() } func (p *Player7DayLoginData) FindDbSt(activeId int32) *db.SqlSevenDayLoginStruct { for i := 0; i < len(p.MsqlStruck); i++ { if p.MsqlStruck[i].ActiveID == activeId { return &p.MsqlStruck[i] } } return nil } func (p *Player7DayLoginData) Res7DayLoginDetail(buf []byte) { req := &msg.Req7DayLoginDetail{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.Res7DayLoginDetail{} if st != nil { res.ActiveID = st.ActiveID res.CurSvrTime = int32(time.Now().Unix()) res.StartSvrTime = st.StartSvrTime res.EndSvrTime = st.EndSvrTime res.LastGetTime = st.LastGetTime res.DwUin = p.M_Player.M_DwUin res.GetIndex = st.GetIndex res.ResultCode = 0 } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "Res7DayLoginDetail", data) } func (p *Player7DayLoginData) ResGet7DayLoginPack(buf []byte) { req := &msg.ReqGet7DayLoginPack{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResGet7DayLoginPack{} if st != nil { t := time.Unix((int64)(st.LastGetTime), 0).Local() nianchu1 := (int64)(st.LastGetTime) - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) timeStamp := time.Now().Unix() t1 := time.Unix(timeStamp, 0).Local() nianchu2 := timeStamp - (int64)(t1.Hour()*3600+t1.Minute()*60+t1.Second()) if nianchu1 == nianchu2 { res.ResultCode = MergeConst.Protocol_Active_7Day_Rewarded } else { res.ActiveID = st.ActiveID res.CurIndex = req.CurIndex + 1 res.LastGetTime = int32(timeStamp) st.LastGetTime = res.LastGetTime st.GetIndex = req.CurIndex + 1 res.DwUin = p.M_Player.M_DwUin res.ResultCode = 0 } } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResGet7DayLoginPack", data) } func (p *Player7DayLoginData) NotifyDailyRenew7Dayfunc() { notify := &msg.NotifyDailyRenew7Day{} notify.CurSvrTime = int32(time.Now().Unix()) for i := 0; i < len(p.MsqlStruck); i++ { if (&p.MsqlStruck[i]).EndSvrTime > notify.CurSvrTime { agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) notify.ActiveID = (&p.MsqlStruck[i]).ActiveID G_getGameLogic().PackResInfo(agent, "NotifyDailyRenew7Day", data) } } } func (p *Player7DayLoginData) SaveDataFromDB(Key interface{}) bool { for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] db.FormatAllMemUpdateDb(&item, "t_player_Limit7DayLogin", "ActiveID") } return true } func (p *Player7DayLoginData) ClearData() bool { p.SaveDataFromDB("") GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) GoUtil.RemoveEvent(MergeConst.Notify_Daily_Renew, p.NotifyDailyRenew7Day, p) p.PlayerActiveData.ClearData() return true } //////////////////////// type PlayerInfinitePackData struct { *PlayerActiveData MsqlStruck []db.SqlLimitInfinitePackStruct } func (p *PlayerInfinitePackData) LoadDataFromDB(dwUin interface{}) bool { sqlStr := "SELECT * FROM t_player_LimitInfinitePack WHERE dwUin = ?" p.MsqlStruck = []db.SqlLimitInfinitePackStruct{} if err := db.SqlDb.Select(&p.MsqlStruck, sqlStr, dwUin.(int32)); err != nil { p.IsHaveDataDb = false } else { p.IsHaveDataDb = true } deleteList := []int{} dlist := []int32{} tempList := []db.SqlLimitInfinitePackStruct{} curtime := time.Now().Unix() startIndex := 0 for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if item.StartSvrTime > int32(curtime) || item.EndSvrTime < int32(curtime) { deleteList = append(deleteList, i) } } for i := 0; i < len(deleteList); i++ { curIndex := deleteList[i] if curIndex == startIndex { startIndex = startIndex + 1 continue } tempList = append(tempList, p.MsqlStruck[startIndex:curIndex]...) startIndex = curIndex + 1 } if startIndex <= len(p.MsqlStruck)-1 { tempList = append(tempList, p.MsqlStruck[startIndex:]...) } for i := 0; i < len(deleteList); i++ { dlist = append(dlist, p.MsqlStruck[deleteList[i]].ActiveID) } if len(dlist) > 0 { p.DeleteOutlineActive(dlist, "t_player_LimitInfinitePack") } p.MsqlStruck = tempList p.Reconnect(false) return true } func (p *PlayerInfinitePackData) CloseNewLimitActivity(args []interface{}) { record := args[0].(*gamedata.ActivityRecord) if record.Type != p.MActType { return } notify := &msg.NotifyLimitedTimeActiveEnd{} notify.DwUin = p.M_Player.M_DwUin notify.MActiveList = []*msg.LimitedTimeEndStruct{} for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if int(item.ConfigActId) == record.Id { msg := &msg.LimitedTimeEndStruct{} msg.ActiveID = item.ActiveID msg.Type = int32(record.Type) notify.MActiveList = append(notify.MActiveList, msg) } } p.MisDirty = true agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyLimitedTimeActiveEnd", data) } func (p *PlayerInfinitePackData) Reconnect(b bool) { GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) GoUtil.RegisterEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) p.PlayerActiveData.Reconnect(b) } func (p *PlayerInfinitePackData) FindDbSt(activeId int32) *db.SqlLimitInfinitePackStruct { for i := 0; i < len(p.MsqlStruck); i++ { if p.MsqlStruck[i].ActiveID == activeId { return &p.MsqlStruck[i] } } return nil } func (p *PlayerInfinitePackData) ResInfinitePackDetail(buf []byte) { req := &msg.ReqInfinitePackDetail{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResInfinitePackDetail{} if st != nil { res.ActiveID = st.ActiveID res.CurSvrTime = int32(time.Now().Unix()) res.StartSvrTime = st.StartSvrTime res.EndSvrTime = st.EndSvrTime res.CurGear = st.CurGear res.DwUin = p.M_Player.M_DwUin res.ResultCode = 0 } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResInfinitePackDetail", data) } func (p *PlayerInfinitePackData) ResBuyInfinitePack(buf []byte) { req := &msg.ReqBuyInfinitePack{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResBuyInfinitePack{} if st != nil { res.ActiveID = st.ActiveID res.DwUin = p.M_Player.M_DwUin res.ResultCode = 0 st.CurGear = st.CurGear + 1 } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResBuyInfinitePack", data) } func (p *PlayerInfinitePackData) SaveDataFromDB(Key interface{}) bool { for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] db.FormatAllMemUpdateDb(&item, "t_player_LimitInfinitePack", "ActiveID") } return true } func (p *PlayerInfinitePackData) ClearData() bool { p.SaveDataFromDB("") GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) p.PlayerActiveData.ClearData() return true } // //////////////////////// type PlayerCardCollectData struct { *PlayerActiveData // Data msg.ResLimitPassportDetail MExchangeData msg.ResExchangeCardBoxData MsqlStruck []db.SqlCardCollectStruct MsqlExchangeStruck []db.SqlExchangeCardStruct MActType int } func (p *PlayerCardCollectData) LoadDataFromDB(dwUin interface{}) bool { sqlStr := "SELECT * FROM t_player_card_data WHERE dwUin = ?" p.MsqlStruck = []db.SqlCardCollectStruct{} if err := db.SqlDb.Select(&p.MsqlStruck, sqlStr, dwUin.(int32)); err != nil { p.IsHaveDataDb = false } else { p.IsHaveDataDb = true } // p.Data.DwUin = dwUin.(int32) deleteList := []int{} dlist := []int32{} tempList := []db.SqlCardCollectStruct{} curtime := time.Now().Unix() startIndex := 0 for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if item.StartSvrTime > int32(curtime) || item.EndSvrTime < int32(curtime) { deleteList = append(deleteList, i) } } for i := 0; i < len(deleteList); i++ { curIndex := deleteList[i] if curIndex == startIndex { startIndex = startIndex + 1 continue } tempList = append(tempList, p.MsqlStruck[startIndex:curIndex]...) startIndex = curIndex + 1 } if startIndex <= len(p.MsqlStruck)-1 { tempList = append(tempList, p.MsqlStruck[startIndex:]...) } for i := 0; i < len(deleteList); i++ { dlist = append(dlist, p.MsqlStruck[deleteList[i]].ActiveID) } if len(dlist) > 0 { p.DeleteOutlineActive(dlist, "t_player_card_data") } timeStamp := (int64)(time.Now().Unix()) t := time.Unix(timeStamp, 0).Local() zero := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) for i := 0; i < len(tempList); i++ { item := tempList[i] if item.RenewSvrTime < int32(zero) { tempList[i].RenewSvrTime = int32(zero) tempList[i].RenewExchangeTime = 0 tempList[i].RenewRequestTime = 0 } } p.MsqlStruck = tempList p.MActType = 5 p.Reconnect(false) p.LoadExchangeCardData(dwUin.(int32)) return true } func (p *PlayerCardCollectData) LoadExchangeCardData(dwUin int32) { sqlStr := "SELECT * FROM t_Player_ExchangeCard_Box_Data WHERE SenderId = ? OR ReceiveId = ?" p.MsqlExchangeStruck = []db.SqlExchangeCardStruct{} p.MExchangeData = msg.ResExchangeCardBoxData{} p.MExchangeData.ExchangeCardItems = []*msg.ExchangeCardItem{} if err := db.SqlDb.Select(&p.MsqlExchangeStruck, sqlStr, dwUin, dwUin); err != nil { } else { } deleteIDs := []int32{} for i := 0; i < len(p.MsqlExchangeStruck); i++ { item := p.MsqlExchangeStruck[i] ExchangeCard := &msg.ExchangeCardItem{} ExchangeCard.SenderId = item.SenderId ExchangeCard.ReceiveId = item.ReceiveId ExchangeCard.GroupId = item.GroupId ExchangeCard.ApplicateStatus = item.ApplicateStatus ExchangeCard.StartTime = item.StartTime ExchangeCard.EventType = item.EventType ExchangeCard.EventParam = item.EventParam ExchangeCard.ConfigActId = item.ConfigActId ExchangeCard.AutoId = item.AutoId if !p.IsInCardActivty(item.ConfigActId) { deleteIDs = append(deleteIDs, item.AutoId) } else { if ExchangeCard.EventType == 1 && ExchangeCard.ApplicateStatus == 2 && ExchangeCard.SenderId == dwUin { deleteIDs = append(deleteIDs, item.AutoId) continue } if ExchangeCard.EventType == 2 && ExchangeCard.ApplicateStatus == 4 && ExchangeCard.SenderId == dwUin { deleteIDs = append(deleteIDs, item.AutoId) continue } p.MExchangeData.ExchangeCardItems = append(p.MExchangeData.ExchangeCardItems, ExchangeCard) } } p.DeleteOutlineCardExchange(deleteIDs, "t_Player_ExchangeCard_Box_Data") } func (p *PlayerCardCollectData) DeleteOutlineCardExchange(deleteList []int32, tableName string) { sqlStr := "DELETE FROM " + tableName + " WHERE auto_id = ?" for i := 0; i < len(deleteList); i++ { result, err := db.SqlDb.Exec(sqlStr, deleteList[i]) if err != nil { fmt.Printf("exec failed, err:%v\n", err) return } affectedRows, err := result.RowsAffected() if err != nil { fmt.Printf("get affected failed, err:%v\n", err) return } fmt.Printf("delete data success, affected rows:%d\n", affectedRows) } } func (p *PlayerCardCollectData) IsInCardActivty(ConfigActId int32) bool { isIn := true activityCfg := gamedata.GetConfigByName("Activity") for i := 0; i < len(G_GameLogicPtr.M_LimitActiveList); i++ { id := G_GameLogicPtr.M_LimitActiveList[i] record := activityCfg.Index(id).(*gamedata.ActivityRecord) if record.Type == 5 && int32(id) != ConfigActId { isIn = false break } } return isIn } func (p *PlayerCardCollectData) GetCardRecord() *gamedata.ActivityRecord { activityCfg := gamedata.GetConfigByName("Activity") for i := 0; i < len(G_GameLogicPtr.M_LimitActiveList); i++ { id := G_GameLogicPtr.M_LimitActiveList[i] record := activityCfg.Index(id).(*gamedata.ActivityRecord) if record.Type == 5 { return record } } return nil } func (p *PlayerCardCollectData) ReqGetDonateCard(buf []byte) { req := &msg.ReqGetDonateCard{} proto.Unmarshal(buf, req) res := &msg.ResGetDonateCard{} exchange := p.GetExchangeCardItem(req.MExchangeCardItem.AutoId) if exchange != nil { units := strings.Split(req.MExchangeCardItem.EventParam, "_") cardId, _ := strconv.Atoi(units[0]) p.AddCard(&p.MsqlStruck[0], int32(cardId), 1, false) p.DeleteExchangeCardItem(req.MExchangeCardItem.AutoId) dbsql := db.SqlExchangeCardStruct{} dbsql.ConfigActId = int32(p.GetCardRecord().Id) dbsql.SenderId = req.MExchangeCardItem.SenderId dbsql.ReceiveId = req.MExchangeCardItem.ReceiveId dbsql.GroupId = req.MExchangeCardItem.GroupId dbsql.ApplicateStatus = 2 dbsql.StartTime = req.MExchangeCardItem.StartTime dbsql.EventType = 1 dbsql.EventParam = req.MExchangeCardItem.EventParam dbsql.AutoId = req.MExchangeCardItem.AutoId db.FormatAllMemUpdateDb(&dbsql, "t_Player_ExchangeCard_Box_Data", "auto_id") res.MExchangeCardItem = &msg.ExchangeCardItem{} res.MExchangeCardItem.SenderId = dbsql.SenderId res.MExchangeCardItem.ReceiveId = dbsql.ReceiveId res.MExchangeCardItem.GroupId = dbsql.GroupId res.MExchangeCardItem.ApplicateStatus = dbsql.ApplicateStatus res.MExchangeCardItem.StartTime = dbsql.StartTime res.MExchangeCardItem.EventType = dbsql.EventType res.MExchangeCardItem.EventParam = dbsql.EventParam res.MExchangeCardItem.ConfigActId = dbsql.ConfigActId res.MExchangeCardItem.AutoId = req.MExchangeCardItem.AutoId player, ok := G_GameLogicPtr.M_Players[req.MExchangeCardItem.SenderId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NotifyGetDonateCard(req.MExchangeCardItem) } } } else { res.ResultCode = MergeConst.Protocol_Exchange_Card_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResGetDonateCard", data) } func (p *PlayerCardCollectData) ReqRefuseExchange(buf []byte) { req := &msg.ReqRefuseExchange{} proto.Unmarshal(buf, req) res := &msg.ResRefuseExchange{} exchange := p.GetExchangeCardItem(req.MExchangeCardItem.AutoId) if exchange != nil { res.MExchangeCardItem = req.MExchangeCardItem if exchange.SenderId == p.M_Player.M_DwUin { units := strings.Split(req.MExchangeCardItem.EventParam, "_") cardId, _ := strconv.Atoi(units[0]) p.AddCard(&p.MsqlStruck[0], int32(cardId), 1, false) timeStamp := (int64)(time.Now().Unix()) t := time.Unix(timeStamp, 0).Local() zero := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) timeStamp1 := (int64)(req.MExchangeCardItem.StartTime) t1 := time.Unix(timeStamp1, 0).Local() zero1 := timeStamp1 - (int64)(t1.Hour()*3600+t1.Minute()*60+t1.Second()) if zero == zero1 { p.MsqlStruck[0].RenewExchangeTime = p.MsqlStruck[0].RenewExchangeTime - 1 if p.MsqlStruck[0].RenewExchangeTime < 0 { p.MsqlStruck[0].RenewExchangeTime = 0 } p.SaveDataFromDB("") } EventAI := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteEventDbData(p.M_Player.M_DwUin, 6, req.MExchangeCardItem.AutoId) p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteLocalDataByAutoId(EventAI) player, ok := G_GameLogicPtr.M_Players[req.MExchangeCardItem.ReceiveId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NOtifyReceiveRefuseExchange(req.MExchangeCardItem) } } else { sqlStr := "SELECT * FROM t_player_card_data WHERE dwUin = ?" MsqlStruck := db.SqlCardCollectStruct{} units := strings.Split(req.MExchangeCardItem.EventParam, "_") cardId, _ := strconv.Atoi(units[1]) err := db.SqlDb.Get(&MsqlStruck, sqlStr, req.MExchangeCardItem.ReceiveId) if err != nil { } else { if MsqlStruck.CardInfo != "" { units := strings.Split(MsqlStruck.CardInfo, ";") for i := 0; i < len(units); i++ { items := strings.Split(units[i], ",") k, _ := strconv.Atoi(items[0]) cnt, _ := strconv.Atoi(items[1]) if k == int(cardId) { cnt = cnt + 1 units[i] = items[0] + "," + strconv.Itoa(cnt) break } } MsqlStruck.CardInfo = strings.Join(units, ";") } db.FormatAllMemUpdateDb(&MsqlStruck, "t_player_card_data", "dwUin") } } } else { EventAI := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteEventDbData(p.M_Player.M_DwUin, 8, req.MExchangeCardItem.AutoId) p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteLocalDataByAutoId(EventAI) player, ok := G_GameLogicPtr.M_Players[req.MExchangeCardItem.SenderId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NOtifyRefuseExchange(req.MExchangeCardItem) player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).DeleteExchangeCardItem(req.MExchangeCardItem.AutoId) } } else { sqlStr := "SELECT * FROM t_player_card_data WHERE dwUin = ?" MsqlStruck := db.SqlCardCollectStruct{} units := strings.Split(req.MExchangeCardItem.EventParam, "_") cardId, _ := strconv.Atoi(units[0]) err := db.SqlDb.Get(&MsqlStruck, sqlStr, req.MExchangeCardItem.SenderId) if err != nil { } else { if MsqlStruck.CardInfo != "" { units := strings.Split(MsqlStruck.CardInfo, ";") for i := 0; i < len(units); i++ { items := strings.Split(units[i], ",") k, _ := strconv.Atoi(items[0]) cnt, _ := strconv.Atoi(items[1]) if k == int(cardId) { cnt = cnt + 1 units[i] = items[0] + "," + strconv.Itoa(cnt) break } } MsqlStruck.CardInfo = strings.Join(units, ";") } } timeStamp := (int64)(time.Now().Unix()) t := time.Unix(timeStamp, 0).Local() zero := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) timeStamp1 := (int64)(req.MExchangeCardItem.StartTime) t1 := time.Unix(timeStamp1, 0).Local() zero1 := timeStamp1 - (int64)(t1.Hour()*3600+t1.Minute()*60+t1.Second()) if zero == zero1 && err == nil { MsqlStruck.RenewExchangeTime -= 1 } db.FormatAllMemUpdateDb(&MsqlStruck, "t_player_card_data", "dwUin") } } res.RenewExchangeTime = p.MsqlStruck[0].RenewExchangeTime p.DeleteExchangeCardItem(req.MExchangeCardItem.AutoId) sqlStr := "DELETE FROM " + "t_Player_ExchangeCard_Box_Data" + " WHERE auto_id = ?" db.SqlDb.Exec(sqlStr, req.MExchangeCardItem.AutoId) } else { res.ResultCode = MergeConst.Protocol_Exchange_Card_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResRefuseExchange", data) } func (p *PlayerCardCollectData) NOtifyReceiveRefuseExchange(st *msg.ExchangeCardItem) { units := strings.Split(st.EventParam, "_") cardId, _ := strconv.Atoi(units[1]) p.AddCard(&p.MsqlStruck[0], int32(cardId), 1, false) p.DeleteExchangeCardItem(st.AutoId) p.SaveDataFromDB("") notify := &msg.NOtifyRefuseExchange{} notify.MExchangeCardItem = st agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NOtifyRefuseExchange", data) } func (p *PlayerCardCollectData) NOtifyRefuseExchange(st *msg.ExchangeCardItem) { notify := &msg.NOtifyRefuseExchange{} notify.MExchangeCardItem = st units := strings.Split(st.EventParam, "_") cardId, _ := strconv.Atoi(units[0]) p.AddCard(&p.MsqlStruck[0], int32(cardId), 1, false) timeStamp := (int64)(time.Now().Unix()) t := time.Unix(timeStamp, 0).Local() zero := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) timeStamp1 := (int64)(st.StartTime) t1 := time.Unix(timeStamp1, 0).Local() zero1 := timeStamp1 - (int64)(t1.Hour()*3600+t1.Minute()*60+t1.Second()) // p.DeleteExchangeCardItem(st.AutoId) if zero == zero1 { p.MsqlStruck[0].RenewExchangeTime = p.MsqlStruck[0].RenewExchangeTime - 1 if p.MsqlStruck[0].RenewExchangeTime < 0 { p.MsqlStruck[0].RenewExchangeTime = 0 } p.SaveDataFromDB("") } notify.RenewExchangeTime = p.MsqlStruck[0].RenewExchangeTime agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NOtifyRefuseExchange", data) } func (p *PlayerCardCollectData) NotifyGetDonateCard(st *msg.ExchangeCardItem) { notify := &msg.NotifyGetDonateCard{} notify.MExchangeCardItem = st p.DeleteExchangeCardItem(st.AutoId) agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyGetDonateCard", data) } func (p *PlayerCardCollectData) GenExchangeIncID() int32 { dbsql := db.SqlExchangeCardReqIncStruct{} dbsql.StartTime = int32(time.Now().Unix()) insertId, _ := db.FormatAllMemInsertDb(&dbsql, "t_Player_ExchangeCard_ReqInc") return int32(insertId) } func (p *PlayerCardCollectData) ReqRequestCard(buf []byte) { req := &msg.ReqRequestCard{} proto.Unmarshal(buf, req) res := &msg.ResRequestCard{} st := p.FindDbSt(req.ActiveID) res.ExchangeCardItems = []*msg.ExchangeCardItem{} if st != nil { if st.RenewRequestTime >= 2 { res.ResultCode = MergeConst.Protocol_Active_CardTime_NoEnough } else { GroupId := p.GenExchangeIncID() st.RenewRequestTime = st.RenewRequestTime + 1 db.FormatAllMemUpdateDb(st, "t_player_card_data", "ActiveID") for i := 0; i < len(req.ReceiverIds); i++ { dbsql := db.SqlExchangeCardStruct{} dbsql.ConfigActId = int32(p.GetCardRecord().Id) dbsql.SenderId = req.SenderId dbsql.ReceiveId = req.ReceiverIds[i] dbsql.GroupId = GroupId dbsql.ApplicateStatus = 1 dbsql.StartTime = int32(time.Now().Unix()) dbsql.EventType = 3 dbsql.EventParam = strconv.Itoa(int(req.CardId)) insertId, _ := db.FormatAllMemInsertDb(&dbsql, "t_Player_ExchangeCard_Box_Data") MExchangeCardItem := &msg.ExchangeCardItem{} MExchangeCardItem.SenderId = dbsql.SenderId MExchangeCardItem.ReceiveId = dbsql.ReceiveId MExchangeCardItem.GroupId = dbsql.GroupId MExchangeCardItem.ApplicateStatus = dbsql.ApplicateStatus MExchangeCardItem.StartTime = dbsql.StartTime MExchangeCardItem.EventType = dbsql.EventType MExchangeCardItem.EventParam = dbsql.EventParam MExchangeCardItem.ConfigActId = dbsql.ConfigActId MExchangeCardItem.AutoId = int32(insertId) p.MExchangeData.ExchangeCardItems = append(p.MExchangeData.ExchangeCardItems, MExchangeCardItem) res.ExchangeCardItems = append(res.ExchangeCardItems, MExchangeCardItem) EventAuid, sqlst, friendInfo := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).NewFriendEventToDb(5, p.M_Player.M_DwUin, dbsql.ReceiveId, []interface{}{int32(insertId), req.CardId}) p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).NotifyNewFriendEvent(EventAuid, sqlst, friendInfo) player, ok := G_GameLogicPtr.M_Players[dbsql.ReceiveId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NotifyRequestCard(MExchangeCardItem) } } } } } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResRequestCard", data) } func (p *PlayerCardCollectData) NotifyRequestCard(MExchangeCardItem *msg.ExchangeCardItem) { p.MExchangeData.ExchangeCardItems = append(p.MExchangeData.ExchangeCardItems, MExchangeCardItem) notify := &msg.NotifyRequestCard{} notify.ExchangeCardItems = MExchangeCardItem agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyRequestCard", data) } func (p *PlayerCardCollectData) NotifyFriendCompleteRequestCard(ComId int32, GroupId int32) { sqlStr := "SELECT * FROM t_Player_ExchangeCard_Box_Data WHERE GroupId = ?" MsqlExchanges := []db.SqlExchangeCardStruct{} if err := db.SqlDb.Select(&MsqlExchanges, sqlStr, GroupId); err != nil { } else { for i := 0; i < len(MsqlExchanges); i++ { if MsqlExchanges[i].ReceiveId == ComId { } else { sqlStr := "DELETE FROM " + "t_Player_ExchangeCard_Box_Data" + " WHERE auto_id = ?" db.SqlDb.Exec(sqlStr, MsqlExchanges[i].AutoId) player, ok := G_GameLogicPtr.M_Players[MsqlExchanges[i].ReceiveId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NotifyHaveFriendCompleteReq(MsqlExchanges[i].AutoId) } } } } } } func (p *PlayerCardCollectData) ReqGetRequestCard(buf []byte) { req := &msg.ReqGetRequestCard{} proto.Unmarshal(buf, req) res := &msg.ResGetRequestCard{} ExchangeItem := p.GetExchangeCardItem(req.ExchangeCardItems.AutoId) if ExchangeItem != nil { res.ExchangeCardItems = req.ExchangeCardItems units := strings.Split(req.ExchangeCardItems.EventParam, "_") excardId, _ := strconv.Atoi(units[0]) p.AddCard(&p.MsqlStruck[0], int32(excardId), 1, false) p.DeleteExchangeCardItem(req.ExchangeCardItems.AutoId) sqlStr := "DELETE FROM " + "t_Player_ExchangeCard_Box_Data" + " WHERE auto_id = ?" db.SqlDb.Exec(sqlStr, req.ExchangeCardItems.AutoId) EventAI := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteEventDbData(p.M_Player.M_DwUin, 7, req.ExchangeCardItems.AutoId) p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteLocalDataByAutoId(EventAI) } else { res.ResultCode = MergeConst.Protocol_Active_CardTime_Outline res.ExchangeCardItems = req.ExchangeCardItems } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResGetRequestCard", data) } func (p *PlayerCardCollectData) NotifyHaveFriendCompleteReq(AutoId int32) { p.DeleteExchangeCardItem(AutoId) notify := &msg.NotifyHaveFriendCompleteReq{} notify.AutoId = AutoId agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyHaveFriendCompleteReq", data) } func (p *PlayerCardCollectData) ReqCompleteRequestCard(buf []byte) { req := &msg.ReqCompleteRequestCard{} proto.Unmarshal(buf, req) res := &msg.ResCompleteRequestCard{} ExchangeItem := p.GetExchangeCardItem(req.ExchangeCardItems.AutoId) st := &p.MsqlStruck[0] if ExchangeItem != nil { units := strings.Split(req.ExchangeCardItems.EventParam, "_") excardId, _ := strconv.Atoi(units[0]) if ExchangeItem.StartTime+3600*24 <= int32(time.Now().Unix()) { res.ResultCode = MergeConst.Protocol_Active_CardTime_Outline res.ExchangeCardItems = req.ExchangeCardItems p.DeleteExchangeCardItem(req.ExchangeCardItems.AutoId) } else { res.ExchangeCardItems = &msg.ExchangeCardItem{} dbsql := db.SqlExchangeCardStruct{} dbsql.ConfigActId = int32(p.GetCardRecord().Id) dbsql.SenderId = req.ExchangeCardItems.SenderId dbsql.ReceiveId = req.ExchangeCardItems.ReceiveId dbsql.GroupId = req.ExchangeCardItems.GroupId dbsql.ApplicateStatus = 2 dbsql.StartTime = req.ExchangeCardItems.StartTime dbsql.EventType = req.ExchangeCardItems.EventType dbsql.EventParam = req.ExchangeCardItems.EventParam dbsql.AutoId = req.ExchangeCardItems.AutoId ExchangeItem.ApplicateStatus = 2 err := db.FormatAllMemUpdateDb(&dbsql, "t_Player_ExchangeCard_Box_Data", "auto_id") res.ExchangeCardItems.SenderId = dbsql.SenderId res.ExchangeCardItems.ReceiveId = dbsql.ReceiveId res.ExchangeCardItems.GroupId = dbsql.GroupId res.ExchangeCardItems.ApplicateStatus = dbsql.ApplicateStatus res.ExchangeCardItems.StartTime = dbsql.StartTime res.ExchangeCardItems.EventType = dbsql.EventType res.ExchangeCardItems.EventParam = dbsql.EventParam res.ExchangeCardItems.ConfigActId = dbsql.ConfigActId res.ExchangeCardItems.AutoId = dbsql.AutoId if err == nil { p.AddCard(st, int32(excardId), -1, false) p.SaveDataFromDB("") EventAuid, sqlst, friendInfo := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).NewFriendEventToDb(7, dbsql.SenderId, dbsql.ReceiveId, []interface{}{dbsql.AutoId, int32(excardId)}) player, ok := G_GameLogicPtr.M_Players[dbsql.SenderId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NotifyCompleteRequestCard(res.ExchangeCardItems) } if player.GetGameData("PlayerFriendEventData") != nil { player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).NotifyNewFriendEvent(EventAuid, sqlst, friendInfo) } } p.NotifyFriendCompleteRequestCard(dbsql.ReceiveId, dbsql.GroupId) } } } else { res.ResultCode = MergeConst.Protocol_Active_CardTime_Outline res.ExchangeCardItems = req.ExchangeCardItems } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResCompleteRequestCard", data) } func (p *PlayerCardCollectData) ReqRefuseRequestCard(buf []byte) { req := &msg.ReqRefuseRequestCard{} proto.Unmarshal(buf, req) res := &msg.ResRefuseRequestCard{} ExchangeItem := p.GetExchangeCardItem(req.ExchangeCardItems.AutoId) if ExchangeItem != nil { p.DeleteExchangeCardItem(req.ExchangeCardItems.AutoId) res.ExchangeCardItems = req.ExchangeCardItems sqlStr := "DELETE FROM " + "t_Player_ExchangeCard_Box_Data" + " WHERE auto_id = ?" db.SqlDb.Exec(sqlStr, req.ExchangeCardItems.AutoId) player, ok := G_GameLogicPtr.M_Players[req.ExchangeCardItems.SenderId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NotifyRefuseRequestCard(req.ExchangeCardItems) } } else { sqlStr := "SELECT * FROM t_player_card_data WHERE dwUin = ?" MsqlStruck := db.SqlCardCollectStruct{} err := db.SqlDb.Get(&MsqlStruck, sqlStr, req.ExchangeCardItems.SenderId) if err != nil { } else { } timeStamp := (int64)(time.Now().Unix()) t := time.Unix(timeStamp, 0).Local() zero := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) timeStamp1 := (int64)(req.ExchangeCardItems.StartTime) t1 := time.Unix(timeStamp1, 0).Local() zero1 := timeStamp1 - (int64)(t1.Hour()*3600+t1.Minute()*60+t1.Second()) if zero == zero1 && err == nil { MsqlStruck.RenewRequestTime -= 1 if MsqlStruck.RenewRequestTime < 0 { MsqlStruck.RenewRequestTime = 0 } } db.FormatAllMemUpdateDb(&MsqlStruck, "t_player_card_data", "dwUin") } } else { } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResRefuseRequestCard", data) } func (p *PlayerCardCollectData) NotifyRefuseRequestCard(st *msg.ExchangeCardItem) { notify := &msg.NotifyRefuseRequestCard{} notify.ExchangeCardItems = st timeStamp := (int64)(time.Now().Unix()) t := time.Unix(timeStamp, 0).Local() zero := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) timeStamp1 := (int64)(st.StartTime) t1 := time.Unix(timeStamp1, 0).Local() zero1 := timeStamp1 - (int64)(t1.Hour()*3600+t1.Minute()*60+t1.Second()) if zero == zero1 { p.MsqlStruck[0].RenewRequestTime = p.MsqlStruck[0].RenewRequestTime - 1 if p.MsqlStruck[0].RenewRequestTime < 0 { p.MsqlStruck[0].RenewRequestTime = 0 } p.SaveDataFromDB("") } notify.RenewRequestTime = p.MsqlStruck[0].RenewRequestTime p.DeleteExchangeCardItem(st.AutoId) agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyRefuseRequestCard", data) } func (p *PlayerCardCollectData) NotifyExchangeCard(st *msg.ExchangeCardItem) { notify := &msg.NotifyExchangeCard{} notify.MExchangeCardItem = st p.MExchangeData.ExchangeCardItems = append(p.MExchangeData.ExchangeCardItems, st) agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyExchangeCard", data) } func (p *PlayerCardCollectData) NotifyDonateFriendCard(st *msg.ExchangeCardItem) { notify := &msg.NotifyDonateFriendCard{} notify.MExchangeCardItem = st p.MExchangeData.ExchangeCardItems = append(p.MExchangeData.ExchangeCardItems, st) agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyDonateFriendCard", data) } func (p *PlayerCardCollectData) NotifyReceiptCard(st *msg.ExchangeCardItem) { notify := &msg.NotifyReceiptCard{} notify.MExchangeCardItem = st index := p.GetExchangeCardItemIndex(st.AutoId) if index >= 0 { p.MExchangeData.ExchangeCardItems[index] = st } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyReceiptCard", data) } func (p *PlayerCardCollectData) NotifyCompleteExchangeCard(st *msg.ExchangeCardItem) { notify := &msg.NotifyCompleteExchangeCard{} notify.MExchangeCardItem = st index := p.GetExchangeCardItemIndex(st.AutoId) if index >= 0 { p.MExchangeData.ExchangeCardItems[index] = st } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyCompleteExchangeCard", data) } func (p *PlayerCardCollectData) NotifyCompleteRequestCard(st *msg.ExchangeCardItem) { notify := &msg.NotifyCompleteRequestCard{} notify.ExchangeCardItems = st index := p.GetExchangeCardItemIndex(st.AutoId) if index >= 0 { p.MExchangeData.ExchangeCardItems[index] = st } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyCompleteRequestCard", data) } func (p *PlayerCardCollectData) NotifyGetExchangeCard(st *msg.ExchangeCardItem) { notify := &msg.NotifyGetExchangeCard{} notify.MExchangeCardItem = st p.DeleteExchangeCardItem(st.AutoId) sqlStr := "DELETE FROM " + "t_Player_ExchangeCard_Box_Data" + " WHERE auto_id = ?" db.SqlDb.Exec(sqlStr, st.AutoId) agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyGetExchangeCard", data) } func (p *PlayerCardCollectData) GetExchangeCardItem(AutoId int32) *msg.ExchangeCardItem { for i := 0; i < len(p.MExchangeData.ExchangeCardItems); i++ { if p.MExchangeData.ExchangeCardItems[i].AutoId == AutoId { return p.MExchangeData.ExchangeCardItems[i] } } return nil } func (p *PlayerCardCollectData) GetExchangeCardItemIndex(AutoId int32) int { index := -1 for i := 0; i < len(p.MExchangeData.ExchangeCardItems); i++ { if p.MExchangeData.ExchangeCardItems[i].AutoId == AutoId { return i } } return index } func (p *PlayerCardCollectData) DeleteExchangeCardItem(AutoId int32) { for i := 0; i < len(p.MExchangeData.ExchangeCardItems); i++ { if p.MExchangeData.ExchangeCardItems[i].AutoId == AutoId { p.MExchangeData.ExchangeCardItems = append(p.MExchangeData.ExchangeCardItems[:i], p.MExchangeData.ExchangeCardItems[i+1:]...) break } } } func (p *PlayerCardCollectData) ReqReceiptCard(buf []byte) { req := &msg.ReqReceiptCard{} proto.Unmarshal(buf, req) res := &msg.ResReceiptCard{} ExchangeItem := p.GetExchangeCardItem(req.MExchangeCardItem.AutoId) st := &p.MsqlStruck[0] if ExchangeItem != nil { units := strings.Split(req.MExchangeCardItem.EventParam, "_") cardId, _ := strconv.Atoi(units[0]) excardId, _ := strconv.Atoi(units[1]) if ExchangeItem.StartTime+3600*24 <= int32(time.Now().Unix()) { res.ResultCode = MergeConst.Protocol_Active_CardTime_Outline res.MExchangeCardItem = req.MExchangeCardItem p.DeleteExchangeCardItem(req.MExchangeCardItem.AutoId) } else { if p.GetCardCnt(st, int32(excardId)) > 1 { res.MExchangeCardItem = &msg.ExchangeCardItem{} dbsql := db.SqlExchangeCardStruct{} dbsql.ConfigActId = int32(p.GetCardRecord().Id) dbsql.SenderId = req.MExchangeCardItem.SenderId dbsql.ReceiveId = req.MExchangeCardItem.ReceiveId dbsql.GroupId = req.MExchangeCardItem.GroupId dbsql.ApplicateStatus = 2 dbsql.StartTime = req.MExchangeCardItem.StartTime dbsql.EventType = 2 dbsql.EventParam = req.MExchangeCardItem.EventParam dbsql.AutoId = req.MExchangeCardItem.AutoId err := db.FormatAllMemUpdateDb(&dbsql, "t_Player_ExchangeCard_Box_Data", "auto_id") res.MExchangeCardItem.SenderId = dbsql.SenderId res.MExchangeCardItem.ReceiveId = dbsql.ReceiveId res.MExchangeCardItem.GroupId = dbsql.GroupId res.MExchangeCardItem.ApplicateStatus = dbsql.ApplicateStatus res.MExchangeCardItem.StartTime = dbsql.StartTime res.MExchangeCardItem.EventType = dbsql.EventType res.MExchangeCardItem.EventParam = dbsql.EventParam res.MExchangeCardItem.ConfigActId = dbsql.ConfigActId res.MExchangeCardItem.AutoId = dbsql.AutoId if err == nil { p.DeleteOneCard(st, int32(excardId)) p.SaveDataFromDB("") EventAI := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteEventDbData(p.M_Player.M_DwUin, 8, req.MExchangeCardItem.AutoId) p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteLocalDataByAutoId(EventAI) EventAuid, sqlst, friendInfo := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).NewFriendEventToDb(6, dbsql.SenderId, dbsql.ReceiveId, []interface{}{dbsql.AutoId, int32(excardId), int32(cardId)}) EventAuid1, sqlst1, friendInfo1 := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).NewFriendEventToDb(9, dbsql.ReceiveId, dbsql.SenderId, []interface{}{dbsql.AutoId, int32(excardId), int32(cardId)}) p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).NotifyNewFriendEvent(EventAuid1, sqlst1, friendInfo1) player, ok := G_GameLogicPtr.M_Players[dbsql.SenderId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NotifyReceiptCard(res.MExchangeCardItem) } if player.GetGameData("PlayerFriendEventData") != nil { player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).NotifyNewFriendEvent(EventAuid, sqlst, friendInfo) } } } } else { res.ResultCode = MergeConst.Protocol_Active_CardFragment_NoEnough } } } else { res.ResultCode = MergeConst.Protocol_Active_CardTime_Outline } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResReceiptCard", data) } func (p *PlayerCardCollectData) IsGoldCard(cardId int) bool { CardDetailCfg := gamedata.GetConfigByName("CardDetailCfg") record := CardDetailCfg.Index(cardId).(*gamedata.CardDetailRecord) return record.IsGold == 1 } func (p *PlayerCardCollectData) NotifyDeleteGoldCardSwap() { notify := &msg.NotifyDeleteGoldCardSwap{} notify.MExchangeCardItems = []*msg.ExchangeCardItem{} DeleteIds := []int32{} temp := []*msg.ExchangeCardItem{} for i := 0; i < len(p.MExchangeData.ExchangeCardItems); i++ { if p.MExchangeData.ExchangeCardItems[i].EventType == 2 { if p.MExchangeData.ExchangeCardItems[i].SenderId == p.M_Player.M_DwUin { if p.MExchangeData.ExchangeCardItems[i].ApplicateStatus == 1 { DeleteIds = append(DeleteIds, p.MExchangeData.ExchangeCardItems[i].AutoId) EventAI := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteEventDbData(p.MExchangeData.ExchangeCardItems[i].ReceiveId, 8, p.MExchangeData.ExchangeCardItems[i].AutoId) p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteLocalDataByAutoId(EventAI) p.NOtifyRefuseExchange(p.MExchangeData.ExchangeCardItems[i]) notify.MExchangeCardItems = append(notify.MExchangeCardItems, p.MExchangeData.ExchangeCardItems[i]) continue } if p.MExchangeData.ExchangeCardItems[i].ApplicateStatus == 2 { DeleteIds = append(DeleteIds, p.MExchangeData.ExchangeCardItems[i].AutoId) EventAI := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteEventDbData(p.M_Player.M_DwUin, 6, p.MExchangeData.ExchangeCardItems[i].AutoId) p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteLocalDataByAutoId(EventAI) player, ok := G_GameLogicPtr.M_Players[p.MExchangeData.ExchangeCardItems[i].ReceiveId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NOtifyReceiveRefuseExchange(p.MExchangeData.ExchangeCardItems[i]) } } else { sqlStr := "SELECT * FROM t_player_card_data WHERE dwUin = ?" MsqlStruck := db.SqlCardCollectStruct{} units := strings.Split(p.MExchangeData.ExchangeCardItems[i].EventParam, "_") cardId, _ := strconv.Atoi(units[1]) err := db.SqlDb.Get(&MsqlStruck, sqlStr, p.MExchangeData.ExchangeCardItems[i].ReceiveId) if err != nil { } else { if MsqlStruck.CardInfo != "" { units := strings.Split(MsqlStruck.CardInfo, ";") for i := 0; i < len(units); i++ { items := strings.Split(units[i], ",") k, _ := strconv.Atoi(items[0]) cnt, _ := strconv.Atoi(items[1]) if k == int(cardId) { cnt = cnt + 1 units[i] = items[0] + "," + strconv.Itoa(cnt) break } } MsqlStruck.CardInfo = strings.Join(units, ";") } db.FormatAllMemUpdateDb(&MsqlStruck, "t_player_card_data", "dwUin") } } p.NOtifyRefuseExchange(p.MExchangeData.ExchangeCardItems[i]) notify.MExchangeCardItems = append(notify.MExchangeCardItems, p.MExchangeData.ExchangeCardItems[i]) continue } } } temp = append(temp, p.MExchangeData.ExchangeCardItems[i]) } p.MExchangeData.ExchangeCardItems = temp p.DeleteOutlineCardExchange(DeleteIds, "t_Player_ExchangeCard_Box_Data") agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyDeleteGoldCardSwap", data) } func (p *PlayerCardCollectData) ReqGetExchangeCard(buf []byte) { req := &msg.ReqGetExchangeCard{} proto.Unmarshal(buf, req) res := &msg.ResGetExchangeCard{} ExchangeItem := p.GetExchangeCardItem(req.MExchangeCardItem.AutoId) st := &p.MsqlStruck[0] if ExchangeItem != nil { units := strings.Split(req.MExchangeCardItem.EventParam, "_") excardId, _ := strconv.Atoi(units[0]) res.MExchangeCardItem = &msg.ExchangeCardItem{} dbsql := db.SqlExchangeCardStruct{} dbsql.ConfigActId = int32(p.GetCardRecord().Id) dbsql.SenderId = req.MExchangeCardItem.SenderId dbsql.ReceiveId = req.MExchangeCardItem.ReceiveId dbsql.GroupId = req.MExchangeCardItem.GroupId dbsql.ApplicateStatus = 4 dbsql.StartTime = req.MExchangeCardItem.StartTime dbsql.EventType = 2 dbsql.EventParam = req.MExchangeCardItem.EventParam dbsql.AutoId = req.MExchangeCardItem.AutoId ExchangeItem.ApplicateStatus = 4 err := db.FormatAllMemUpdateDb(&dbsql, "t_Player_ExchangeCard_Box_Data", "auto_id") res.MExchangeCardItem.SenderId = dbsql.SenderId res.MExchangeCardItem.ReceiveId = dbsql.ReceiveId res.MExchangeCardItem.GroupId = dbsql.GroupId res.MExchangeCardItem.ApplicateStatus = dbsql.ApplicateStatus res.MExchangeCardItem.StartTime = dbsql.StartTime res.MExchangeCardItem.EventType = dbsql.EventType res.MExchangeCardItem.EventParam = dbsql.EventParam res.MExchangeCardItem.ConfigActId = dbsql.ConfigActId res.MExchangeCardItem.AutoId = dbsql.AutoId if err == nil { p.AddCard(st, int32(excardId), 1, false) p.SaveDataFromDB("") EventAI := p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteEventDbData(p.M_Player.M_DwUin, 11, req.MExchangeCardItem.AutoId) p.M_Player.GetIFGameData("PlayerFriendEventData").(*PlayerFriendEventData).DeleteLocalDataByAutoId(EventAI) player, ok := G_GameLogicPtr.M_Players[dbsql.SenderId] if ok { if player.GetGameData("PlayerCardCollectData") != nil { player.GetIFGameData("PlayerCardCollectData").(*PlayerCardCollectData).NotifyGetExchangeCard(res.MExchangeCardItem) } } } } else { res.ResultCode = MergeConst.Protocol_Active_CardTime_Outline res.MExchangeCardItem = req.MExchangeCardItem } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResGetExchangeCard", data) } func (p *PlayerCardCollectData) CloseNewLimitActivity(args []interface{}) { record := args[0].(*gamedata.ActivityRecord) if record.Type != p.MActType { return } notify := &msg.NotifyLimitedTimeActiveEnd{} notify.DwUin = p.M_Player.M_DwUin notify.MActiveList = []*msg.LimitedTimeEndStruct{} for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] if int(item.ConfigActId) == record.Id { msg := &msg.LimitedTimeEndStruct{} msg.ActiveID = item.ActiveID msg.Type = int32(record.Type) notify.MActiveList = append(notify.MActiveList, msg) } } p.MisDirty = true agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyLimitedTimeActiveEnd", data) } func (p *PlayerCardCollectData) Reconnect(b bool) { GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) GoUtil.RegisterEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) GoUtil.RemoveEvent(MergeConst.Notify_Daily_Renew, p.NotifyDailyRenew, p) GoUtil.RegisterEvent(MergeConst.Notify_Daily_Renew, p.NotifyDailyRenew, p) p.PlayerActiveData.Reconnect(b) if b { p.LoadDataFromDB(p.M_Player.M_DwUin) } } func (p *PlayerCardCollectData) NotifyDailyRenew(args []interface{}) { timeStamp := (int64)(time.Now().Unix()) t := time.Unix(timeStamp, 0).Local() zero := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) for i := 0; i < len(p.MsqlStruck); i++ { if p.MsqlStruck[i].RenewSvrTime < int32(zero) { p.MsqlStruck[i].RenewSvrTime = int32(zero) p.MsqlStruck[i].RenewExchangeTime = 0 p.MsqlStruck[i].RenewRequestTime = 0 p.NotifyCardDailyRenew(&p.MsqlStruck[i]) } } } func (p *PlayerCardCollectData) FindDbSt(activeId int32) *db.SqlCardCollectStruct { for i := 0; i < len(p.MsqlStruck); i++ { if p.MsqlStruck[i].ActiveID == activeId { return &p.MsqlStruck[i] } } return nil } func (p *PlayerCardCollectData) ResCardCollectDetail(buf []byte) { req := &msg.ReqCardCollectDetail{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResCardCollectDetail{} if st != nil { res.ActiveID = st.ActiveID res.CardInfo = st.CardInfo res.Fragment = st.Fragment res.FinalReward = st.FinalReward res.CardRewardInfo = st.CardRewardInfo res.MasterCards = st.MasterCards res.CurSvrTime = int32(time.Now().Unix()) res.StartSvrTime = st.StartSvrTime res.EndSvrTime = st.EndSvrTime res.DwUin = p.M_Player.M_DwUin res.Universal = st.Universal res.RenewSvrTime = st.RenewSvrTime res.RenewExchangeTime = st.RenewExchangeTime res.RenewRequestTime = st.RenewRequestTime res.ResultCode = 0 } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResCardCollectDetail", data) } func (p *PlayerCardCollectData) NotifyCardDailyRenew(st *db.SqlCardCollectStruct) { notify := &msg.NotifyCardDailyRenew{} notify.ActiveID = st.ActiveID notify.RenewExchangeTime = st.RenewExchangeTime notify.RenewRequestTime = st.RenewRequestTime agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(notify) G_getGameLogic().PackResInfo(agent, "NotifyCardDailyRenew", data) p.SaveDataFromDB("") } func (p *PlayerCardCollectData) GetIsGetRewardById(st *db.SqlCardCollectStruct, id int32) bool { if st.CardRewardInfo == "" { return false } else { units := strings.Split(st.CardRewardInfo, ",") for i := 0; i < len(units); i++ { cnt, _ := strconv.Atoi(units[i]) if int32(cnt) == id { return true } } } return false } func (p *PlayerCardCollectData) GetAlbumRewardById(st *db.SqlCardCollectStruct, id int32) { if st.CardRewardInfo == "" { st.CardRewardInfo = strconv.Itoa(int(id)) } else { st.CardRewardInfo = st.CardRewardInfo + "," + strconv.Itoa(int(id)) } } func (p *PlayerCardCollectData) DeleteOneCard(st *db.SqlCardCollectStruct, id int32) { if st.CardInfo != "" { units := strings.Split(st.CardInfo, ";") isHave := false for i := 0; i < len(units); i++ { items := strings.Split(units[i], ",") k, _ := strconv.Atoi(items[0]) cnt, _ := strconv.Atoi(items[1]) if k == int(id) { cnt = cnt - 1 units[i] = items[0] + "," + strconv.Itoa(cnt) isHave = true break } } if !isHave { } else { st.CardInfo = strings.Join(units, ";") } } } func (p *PlayerCardCollectData) GetCardCnt(st *db.SqlCardCollectStruct, id int32) int { Cnt := 0 if st.CardInfo != "" { units := strings.Split(st.CardInfo, ";") for i := 0; i < len(units); i++ { items := strings.Split(units[i], ",") k, _ := strconv.Atoi(items[0]) cnt, _ := strconv.Atoi(items[1]) if k == int(id) { return cnt } } } return Cnt } func (p *PlayerCardCollectData) AddCard(st *db.SqlCardCollectStruct, id int32, count int32, isAddFragment bool) int32 { AddFragment := 0 CardDetailCfg := gamedata.GetConfigByName("CardDetailCfg") record1 := CardDetailCfg.Index(int(id)) record := record1.(*gamedata.CardDetailRecord) if st.CardInfo != "" { units := strings.Split(st.CardInfo, ";") isHave := false for i := 0; i < len(units); i++ { items := strings.Split(units[i], ",") k, _ := strconv.Atoi(items[0]) cnt, _ := strconv.Atoi(items[1]) if k == int(id) { cnt = cnt + int(count) units[i] = items[0] + "," + strconv.Itoa(cnt) AddFragment = AddFragment + int(count)*int(record.Star) isHave = true break } } if !isHave { st.CardInfo = st.CardInfo + ";" + strconv.Itoa(int(id)) + "," + strconv.Itoa(int(count)) AddFragment = AddFragment + int(count-1)*int(record.Star) } else { st.CardInfo = strings.Join(units, ";") } } else { st.CardInfo = strconv.Itoa(int(id)) + "," + strconv.Itoa(int(count)) AddFragment = AddFragment + int(count-1)*int(record.Star) } if !isAddFragment { AddFragment = 0 } return int32(AddFragment) } func (p *PlayerCardCollectData) ReqAddCard(buf []byte) { req := &msg.ReqAddCard{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResAddCard{} if st != nil { res.ActiveID = st.ActiveID res.Id = req.Id res.Count = req.Count st.Universal = st.Universal + req.Count AddFragment := p.AddCard(st, req.Id, req.Count, true) st.Fragment = st.Fragment + AddFragment res.Fragment = st.Fragment } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResAddCard", data) p.SaveDataFromDB("") } func (p *PlayerCardCollectData) ResUnpackCard(buf []byte) { req := &msg.ReqUnpackCard{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResUnpackCard{} if st != nil { res.ActiveID = st.ActiveID res.CardIds = req.CardIds res.CardCnts = req.CardCnts res.PackID = req.PackID var AddFragment int32 = 0 for i := 0; i < len(req.CardIds); i++ { add := p.AddCard(st, req.CardIds[i], req.CardCnts[i], true) AddFragment = AddFragment + add st.Universal = st.Universal + req.CardCnts[i] } st.Fragment = st.Fragment + AddFragment res.Fragment = st.Fragment } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResUnpackCard", data) p.SaveDataFromDB("") } func (p *PlayerCardCollectData) ReqUpdateStickerCount(buf []byte) { req := &msg.ReqUpdateStickerCount{} res := &msg.ResUpdateStickerCount{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) if st != nil { st.Fragment += req.Sticker } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResUpdateStickerCount", data) p.SaveDataFromDB("") } func (p *PlayerCardCollectData) AddMasterCard(st *db.SqlCardCollectStruct, id int32, count int32) { if st.MasterCards != "" { units := strings.Split(st.MasterCards, ";") isHave := false for i := 0; i < len(units); i++ { items := strings.Split(units[i], ",") k, _ := strconv.Atoi(items[0]) cnt, _ := strconv.Atoi(items[1]) if k == int(id) { cnt = cnt + int(count) units[i] = items[0] + "," + strconv.Itoa(cnt) isHave = true break } } if !isHave { st.MasterCards = st.MasterCards + ";" + strconv.Itoa(int(id)) + "," + strconv.Itoa(int(count)) } else { st.MasterCards = strings.Join(units, ";") } } else { st.MasterCards = strconv.Itoa(int(id)) + "," + strconv.Itoa(int(count)) } } func (p *PlayerCardCollectData) ReqAddMasterCard(buf []byte) { req := &msg.ReqAddMasterCard{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResAddMasterCard{} if st != nil { res.ActiveID = st.ActiveID res.Id = req.Id res.Count = req.Count p.AddMasterCard(st, req.Id, req.Count) } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResAddMasterCard", data) p.SaveDataFromDB("") } func (p *PlayerCardCollectData) UseMasterCard(st *db.SqlCardCollectStruct, id int32, count int32) bool { if st.MasterCards != "" { units := strings.Split(st.MasterCards, ";") isHave := false for i := 0; i < len(units); i++ { items := strings.Split(units[i], ",") k, _ := strconv.Atoi(items[0]) cnt, _ := strconv.Atoi(items[1]) if k == int(id) && cnt >= int(count) { cnt = cnt - int(count) units[i] = items[0] + "," + strconv.Itoa(cnt) isHave = true break } } if !isHave { // st.MasterCards = st.MasterCards + ";" + strconv.Itoa(int(id)) + "," + strconv.Itoa(int(count)) } else { st.MasterCards = strings.Join(units, ";") return true } } else { // st.MasterCards = strconv.Itoa(int(id)) + "," + strconv.Itoa(int(count)) } return false } func (p *PlayerCardCollectData) ReqBuyStickerItem(buf []byte) { req := &msg.ReqBuyStickerItem{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResBuyStickerItem{} if st != nil { res.ActiveID = st.ActiveID if st.Fragment >= req.CostSticker { st.Fragment = st.Fragment - req.CostSticker res.Id = req.Id res.CurFragment = st.Fragment res.ResultCode = 0 } else { res.ResultCode = MergeConst.Protocol_Active_CardFragment_NoEnough } } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResBuyStickerItem", data) p.SaveDataFromDB("") } func (p *PlayerCardCollectData) ReqUseMasterCard(buf []byte) { req := &msg.ReqUseMasterCard{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResUseMasterCard{} if st != nil { res.ActiveID = st.ActiveID res.MasterId = req.MasterId res.ExchangeCardId = req.ExchangeCardId isUse := p.UseMasterCard(st, req.MasterId, 1) if isUse { AddFrament := p.AddCard(st, req.ExchangeCardId, 1, true) st.Fragment = st.Fragment + AddFrament res.Fragment = st.Fragment res.ResultCode = 0 } else { res.ResultCode = MergeConst.Protocol_Active_Card_NoEnough } } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResUseMasterCard", data) p.SaveDataFromDB("") } func (p *PlayerCardCollectData) ResGetCardAlbumReward(buf []byte) { req := &msg.ReqGetCardAlbumReward{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResGetCardAlbumReward{} if st != nil { res.ActiveID = st.ActiveID res.Id = req.Id if p.GetIsGetRewardById(st, req.Id) { res.ResultCode = MergeConst.Protocol_Active_Card_Rewarded } else { res.ResultCode = 0 p.GetAlbumRewardById(st, req.Id) p.SaveDataFromDB("") } } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResGetCardAlbumReward", data) } func (p *PlayerCardCollectData) ResGetAllCardReward(buf []byte) { req := &msg.ReqGetAllCardReward{} proto.Unmarshal(buf, req) st := p.FindDbSt(req.ActiveID) res := &msg.ResGetAllCardReward{} if st != nil { if st.FinalReward == int32(1) { res.ResultCode = MergeConst.Protocol_Active_Card_Rewarded } else { res.ResultCode = 0 st.FinalReward = 1 p.SaveDataFromDB("") } } else { res.ResultCode = MergeConst.Protocol_Active_No_Exsit } agent := p.GetPlayer().GetAgentByPlayer() data, _ := proto.Marshal(res) G_getGameLogic().PackResInfo(agent, "ResGetAllCardReward", data) } func (p *PlayerCardCollectData) SaveDataFromDB(Key interface{}) bool { for i := 0; i < len(p.MsqlStruck); i++ { item := p.MsqlStruck[i] db.FormatAllMemUpdateDb(&item, "t_player_card_data", "ActiveID") } return true } func (p *PlayerCardCollectData) ClearData() bool { p.SaveDataFromDB("") GoUtil.RemoveEvent(MergeConst.CloseNewLimitActivity, p.CloseNewLimitActivity, p) GoUtil.RemoveEvent(MergeConst.Notify_Daily_Renew, p.NotifyDailyRenew, p) p.PlayerActiveData.ClearData() return true }