예제 #1
0
        // 执行Add操作,但是也会触发Spawn流程,适用于对已经存在于地图上的对象使用
        public virtual void SpawnAdd(TUnit chara, string tdid, long?rtid = null, int?team = null)
        {
            if (chara == null)
            {
                return;
            }
            if (!rtid.HasValue)
            {
                chara.SetRTID(IDUtil.Gen());
            }
            else
            {
                chara.SetRTID(rtid.Value);
            }

            TConfig config = TDLuaMgr?.Get <TConfig>(tdid);

            if (config == null)
            {
                config = new TConfig();
            }
            else if (IsCopyConfig)
            {
                config = config.Copy <TConfig>();
            }

            chara.SpawnMgr = this;
            chara.SetTDID(tdid);
            chara.SetTeam(team);
            chara.SetConfig(config);
            chara.OnInit();
            chara.OnBeSpawned();
            OnSpawned(tdid, chara.ID, chara);
            AddToData(chara);
        }
예제 #2
0
        public void AddLog(string key, BaseUnit nation = null, params object[] objs)
        {
            if (!BaseGlobal.IsUnReadData)
            {
                return;
            }
            if (nation != null)
            {
                if (!nation.IsPlayer())
                {
                    return;
                }
            }
            BaseLogData tempData = new BaseLogData();

            tempData.Date    = BaseGlobal.DateTimeMgr.GetCurDateStr();
            tempData.Desc    = Util.GetStr(key, objs);
            tempData.ID      = IDUtil.Gen();
            tempData.CurTime = 0;
            Data.Insert(0, tempData);
            if (Data.Count > MaxCount)
            {
                RemLastLog();
            }
            Callback_OnAddedLog?.Invoke(tempData);
        }
예제 #3
0
 //推送谈判内容到Alert,用于给对方发送信息
 public void PushNagotiationToAlert(TDBaseAlertData data)
 {
     if (!IsStarNegotiation)
     {
         CLog.Error("AddArticle 没有调用StarNegotiation");
         return;
     }
     data.SelfArticle.Clear();
     data.TargetArticle.Clear();
     foreach (var item in TempSelfArticlies)
     {
         item.ID         = IDUtil.Gen();
         item.BaseTarget = TargetArticleUnit;
         item.OnBeAdded(SelfArticleUnit);
         Datas.Add(item);
         data.SelfArticle.Add(item);
     }
     foreach (var item in TempTargetArticlies)
     {
         item.ID         = IDUtil.Gen();
         item.BaseTarget = SelfArticleUnit;
         item.OnBeAdded(TargetArticleUnit);
         Datas.Add(item);
         data.TargetArticle.Add(item);
     }
     data.WarfareData = CurWarData;
     clearNagotiation();
 }
예제 #4
0
        //添加,触发整个SpawnAdd流程
        public virtual void SpawnAdd(TData data, string tdid = null, long?rtid = null, int?team = null)
        {
            if (!tdid.IsInv())
            {
                data.TDID = tdid;
            }
            else
            {
                tdid = data.TDID;
            }

            if (rtid != null)
            {
                data.ID = rtid.Value;
            }
            else
            {
                rtid = data.ID = IDUtil.Gen();
            }
            data.OnBeAdded(SelfMono);
            OnSpawned(tdid, rtid.Value, data);
            AddToData(data);
        }
예제 #5
0
        private TData Add(string tdid, BaseUnit cast = null, Callback <TData> action = null, bool isAutoTrigger = false)
        {
            if (!TDLuaMgr.Contains(tdid))
            {
                if (CommonAlert == tdid)
                {
                    CLog.Error("没有:{0},请手动添加CommonAlert", tdid);
                }
                else
                {
                    CLog.Error("没有:{0},请手动添加Alert", tdid);
                }
                return(null);
            }

            TData sourceAlert = TDLuaMgr.Get <TData>(tdid);

            sourceAlert.Cast     = cast ? cast : LocalPlayer;
            sourceAlert.AlertMgr = this;

            //判断通知是否可以被合并
            var finalAlert = CanMerge(sourceAlert);

            if (finalAlert != null)
            {
                finalAlert.OnMerge();
                Callback_OnMerge?.Invoke(finalAlert);
            }
            else
            {
                finalAlert    = sourceAlert.Copy <TData>();
                finalAlert.ID = IDUtil.Gen();
                finalAlert.OnBeAdded(SelfBaseUnit);
                Data.Add(finalAlert);
                if (finalAlert.Type == AlertType.Interaction)
                {
                    //推送最近一次的谈判信息
                    if (ArticleMgr.IsStarNegotiation)
                    {
                        ArticleMgr.PushNagotiationToAlert(finalAlert);
                    }
                    InteractionData.Add(finalAlert);
                    Callback_OnInteractionChange?.Invoke(finalAlert);
                }
                else if (finalAlert.Type == AlertType.Disposable)
                {
                    DisposableData.Add(finalAlert);
                    Callback_DisposableChange?.Invoke(finalAlert);
                }
                else if (finalAlert.Type == AlertType.Continue)
                {
                    ContinueData.Add(finalAlert);
                    Callback_ContinueChange?.Invoke(finalAlert);
                }
                action?.Invoke(finalAlert);
                if (BaseGlobal.IsUnReadData)
                {
                    Callback_OnAdded?.Invoke(finalAlert);
                }
            }
            if (finalAlert.IsAutoTrigger || isAutoTrigger)
            {
                finalAlert.DoLeftClickTrigger();
            }
            return(finalAlert);
        }