| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package show
- import (
- capp "f1-game/internal/cherry_app"
- "f1-game/internal/data"
- "f1-game/internal/enum"
- "f1-game/internal/event"
- "f1-game/internal/facade"
- nameRoute "f1-game/internal/name/route"
- "f1-game/internal/pb"
- "f1-game/internal/sessions"
- "f1-game/nodes/map/internal/db"
- "slices"
- clog "github.com/cherry-game/cherry/logger"
- cproto "github.com/cherry-game/cherry/net/proto"
- )
- func Service() *service {
- return &service{}
- }
- type service struct {
- facade.PlayerServiceBase[*db.MapPlayerTable]
- }
- func (p *service) OnLogin(playerTable *db.MapPlayerTable, session *cproto.Session) {
- for _, showRow := range data.MapMainCityShow.List() {
- // 道具激活跳过
- if showRow.ActiveType == enum.ShowActiveType_Item {
- continue
- }
- // 当前激活条件不需要
- if showRow.ActiveCondition.Key <= 0 && showRow.ActiveCondition.Value <= 0 {
- _, found := playerTable.Shows.GetShow(showRow.MainCityShowID)
- if !found {
- playerTable.Shows.ActiveShow(showRow.MainCityShowID, showRow.ExpireTime, true)
- playerTable.SetChangeData()
- }
- }
- }
- }
- // Push 推送主城外观数据
- func (p *service) Push(mapPlayerTable *db.MapPlayerTable, session *cproto.Session) {
- resp := mapPlayerTable.Shows.ToProto()
- sessions.PushWithSession(session, nameRoute.PushMapPlayer_MainCityShow, resp)
- }
- // ChangePush 推送主城外观变更
- func (p *service) ChangePush(playerTable *db.MapPlayerTable, delShowIDs []int32, changeShowIDs ...int32) {
- if len(delShowIDs) <= 0 && len(changeShowIDs) <= 0 {
- return
- }
- session, found := sessions.GetSession(playerTable.PlayerID)
- if !found {
- return
- }
- resp := &pb.MainCityShowChangePush{}
- if len(delShowIDs) > 0 {
- resp.DelShowIDs = delShowIDs
- }
- for _, changeShowID := range changeShowIDs {
- show, found := playerTable.Shows.GetShow(changeShowID)
- if !found {
- clog.Errorf("change show not found. playerID:%d, showID:%d", playerTable.PlayerID, changeShowID)
- continue
- }
- resp.List = append(resp.List, show.ToShowProto(changeShowID))
- }
- sessions.PushWithSession(session, nameRoute.PushMapPlayer_MainCityShowChange, resp)
- }
- func (p *service) CheckMainCityShowExpire(playerTable *db.MapPlayerTable, nowSecond int64) {
- if len(playerTable.Shows.ShowMap) <= 0 {
- return
- }
- // 获取过期的外观
- delShowIDs := playerTable.Shows.CheckExpire(nowSecond)
- if len(delShowIDs) <= 0 {
- return
- }
- if slices.Contains(delShowIDs, playerTable.Shows.MainCityShowID) {
- oldShowID := playerTable.Shows.MainCityShowID
- playerTable.Shows.MainCityShowID = 0
- // 发送变更事件
- capp.PostEvent(event.NewMainCityShowChange(playerTable.PlayerID, oldShowID))
- }
- playerTable.Save2Queue()
- p.ChangePush(playerTable, delShowIDs)
- }
|