Beispiel #1
0
 public virtual bool Init(CharacterController controller, OperationActivity data, DBOperationActivityData db, DateTime begin, DateTime end)
 {
     Controller = controller;
     mDBData    = db;
     Id         = data.Id;
     mDBData.Id = Id;
     StartTime  = begin;
     EndTime    = end;
     Param      = data.Param;
     RefreshActivity(data);
     return(true);
 }
Beispiel #2
0
        public void Init()
        {
            DictActivity.Clear();
            bool dirty = false;
            int  i     = 0;
            var  dict  = OperationActivityManager.Instance.DictActivity;

            foreach (var kv in dict)
            {
                var act = kv.Value;
                if (!act.IsActive)
                {
                    continue;
                }

                if (act.ServerList.Count > 0 && !act.ServerList.Contains(SceneExtension.GetServerLogicId(mCharacter.serverId)))
                {
                    continue;
                }

                if (!act.IsTitle && act.ItemList.Count <= 0)
                {
                    continue;
                }

                DateTime startTime = DateTime.MinValue;
                DateTime endTime   = DateTime.MinValue;

                if (eRechargeActivityOpenRule.NewServerAuto == act.OpenRule)
                {
                    DateTime time  = DateTime.Now;
                    var      table = Table.GetServerName(SceneExtension.GetServerLogicId(mCharacter.serverId));
                    if (null == table)
                    {
                        Logger.Fatal("PlayerOperationActivityManager.Init mCharacter.serverId={0}", SceneExtension.GetServerLogicId(mCharacter.serverId));
                    }
                    else
                    {
                        time = DateTime.Parse(table.OpenTime).Date;
                    }
                    startTime = time.AddHours(act.DelayHours);
                    endTime   = time.AddHours(act.LastHours);
                }
                else
                {
                    startTime = act.StartTime;
                    endTime   = act.EndTime;
                }

                if (!(DateTime.Now >= startTime && DateTime.Now < endTime))
                {
                    continue;
                }

                DBOperationActivityData dbAct = null;

                for (int j = i; j < mDbData.Data.Count; j++)
                {
                    var dbData = mDbData.Data[j];
                    if (null != dbData && dbData.Id == act.Id)
                    {
                        dbAct = dbData;
                        if (j != i)
                        {
                            var temp = mDbData.Data[j];
                            mDbData.Data[j] = mDbData.Data[i];
                            mDbData.Data[i] = temp;
                        }
                        break;
                    }
                }
                if (null == dbAct)
                {
                    dbAct = new DBOperationActivityData();
                    mDbData.Data.Insert(i, dbAct);
                    dirty = true;
                }


                PlayerOperationActivity playerAct = null;

                var type = (OperationActivityType)act.Type;

                if (type == OperationActivityType.Guide)
                {
                    playerAct = new PlayerOperationActivityGuide();
                }
                else if (type == OperationActivityType.Recharge)
                {
                    playerAct = new PlayerOperationActivityRecharge();
                }
                else if (type == OperationActivityType.SpecialEvent)
                {
                    playerAct = new PlayerOperationActivitySpecialEvent();
                }
                else if (type == OperationActivityType.Investment)
                {
                    playerAct = new PlayerOperationActivityInvestment();
                }
                else if (type == OperationActivityType.Rank)
                {
                    var actRank = new PlayerOperationActivityRank();
                    var temp    = act as OperationActivityRank;
                    actRank.RankType = temp.RankType;
                    playerAct        = actRank;
                }
                else if (type == OperationActivityType.Lottery)
                {
                    playerAct = new PlayerOperationActivityLottery();
                }
                else
                {
                    //Error
                }
                playerAct.Init(mCharacter, act, dbAct, startTime, endTime);

                DictActivity.Add(playerAct.Id, playerAct);
                AddChild(playerAct);
                i++;
            }

            var remCount = mDbData.Data.Count - i;

            if (remCount > 0)
            {
                mDbData.Data.RemoveRange(i, remCount);
                dirty = true;
            }
            if (dirty)
            {
                MarkDirty();
            }

            NeedReset = false;
        }