示例#1
0
        //用于上层逻辑检查通过后调用
        public void StartSkill(int actorId, int skillId, float facedir)
        {
            GameObject obj = LogicSystem.GetGameObject(actorId);

            if (null != obj)
            {
                SkillLogicInfo logicInfo = m_SkillLogicInfos.Find(info => info.Sender == obj && info.SkillId == skillId);
                if (logicInfo != null)
                {
                    return;
                }
                ChangeDir(obj, facedir);
                SkillInstanceInfo inst = NewSkillInstance(skillId);
                if (null != inst)
                {
                    m_SkillLogicInfos.Add(new SkillLogicInfo(obj, inst));
                }
                else
                {
                    LogicSystem.NotifyGfxStopSkill(obj, skillId);
                    return;
                }

                logicInfo = m_SkillLogicInfos.Find(info => info.Sender == obj && info.SkillId == skillId);
                if (null != logicInfo)
                {
                    if (OnGfxShillStart != null)
                    {
                        OnGfxShillStart(obj, skillId);
                    }
                    LogicSystem.NotifyGfxAnimationStart(obj, true);
                    logicInfo.SkillInst.Start(logicInfo.Sender);
                }
            }
        }
示例#2
0
        public SkillInstance Analyze(int skillId)
        {
            SkillInstanceInfo inst = NewSkillInstance(skillId);

            if (null != inst)
            {
                inst.m_SkillInstance.Analyze(null);
                List <int>    impacts   = new List <int>();
                List <string> resources = new List <string>();
                for (int i = 0; i < inst.m_SkillInstance.SummonNpcSkills.Count; i++)
                {
                    AnalyzeNpcSkills(inst.m_SkillInstance.SummonNpcSkills[i], ref impacts, ref resources);
                }

                /*
                 * foreach (int skill in inst.m_SkillInstance.SummonNpcSkills) {
                 * AnalyzeNpcSkills(skill, ref impacts, ref resources);
                 * }*/
                inst.m_SkillInstance.EnableImpactsToOther.AddRange(impacts);
                inst.m_SkillInstance.Resources.AddRange(resources);
                return(inst.m_SkillInstance);
            }
            else
            {
                return(null);
            }
        }
 public void PreloadSkillInstance(TableConfig.Skill skillData)
 {
     if (null != skillData)
     {
         SkillInstanceInfo info = NewSkillInstanceImpl(skillData.id, skillData);
         if (null != info)
         {
             RecycleSkillInstance(info);
             if (null != info.m_SkillInstance.EmitSkillInstances)
             {
                 foreach (var pair in info.m_SkillInstance.EmitSkillInstances)
                 {
                     SkillInstanceInfo iinfo = NewInnerSkillInstanceImpl(PredefinedSkill.c_EmitSkillId, pair.Value);
                     RecycleSkillInstance(iinfo);
                 }
             }
             if (null != info.m_SkillInstance.HitSkillInstances)
             {
                 foreach (var pair in info.m_SkillInstance.HitSkillInstances)
                 {
                     SkillInstanceInfo iinfo = NewInnerSkillInstanceImpl(PredefinedSkill.c_HitSkillId, pair.Value);
                     RecycleSkillInstance(iinfo);
                 }
             }
         }
     }
 }
示例#4
0
        public void PreloadSkillInstance(int skillId)
        {
            SkillInstanceInfo info = NewSkillInstance(skillId);

            if (null != info)
            {
                RecycleSkillInstance(info);
            }
        }
示例#5
0
        public void Execute()
        {
            long time = (long)(m_Contexts.input.time.Value * 1000);

            var entities = m_SkillEntities.GetEntities();

            foreach (GameEntity entity in entities)
            {
                SkillComponent    skillComponent = entity.skill;
                SkillInstanceInfo info           = skillComponent.Instance;
                if (null != info)
                {
                    info.SkillInstance.Tick(time);
                    if (info.SkillInstance.IsTerminated)
                    {
                        RecycleSkillInstance(info);

                        skillComponent.Instance = null;

                        entity.ReplaceLastSkill(info.SkillId, info.Category, time);
                    }
                }
                if (null != skillComponent.StartParam)
                {
                    if (skillComponent.Instance == null)
                    {
                        SkillInstanceInfo instance = NewSkillInstance(skillComponent.StartParam.Id);
                        if (null != instance && null != instance.SkillInstance)
                        {
                            instance.Category = skillComponent.StartParam.Category;
                            instance.SkillInstance.SenderId        = skillComponent.StartParam.SenderId;
                            instance.SkillInstance.Target          = entity;
                            instance.SkillInstance.SenderPosition  = skillComponent.StartParam.SenderPosition;;
                            instance.SkillInstance.SenderDirection = skillComponent.StartParam.SenderDirection;
                            instance.SkillInstance.Context         = Contexts.sharedInstance.game;
                            instance.SkillInstance.AddVariable("@@id", entity.id.value);
                            instance.SkillInstance.GlobalVariables = m_GlobalVariables;
                            instance.SkillInstance.Start();

                            entity.ReplaceSkill(instance, null);
                        }
                        else
                        {
                            entity.ReplaceSkill(null, null);
                        }
                    }
                    else
                    {
                        skillComponent.StartParam = null;
                    }
                }
            }
        }
示例#6
0
 private void AddStoryInstanceInfoToPool(int skillId, SkillInstanceInfo info)
 {
     if (m_SkillInstancePool.TryGetValue(skillId, out List <SkillInstanceInfo> infos))
     {
         infos.Add(info);
     }
     else
     {
         infos = new List <SkillInstanceInfo> {
             info
         };
         m_SkillInstancePool.Add(skillId, infos);
     }
 }
示例#7
0
 private void AddSkillInstanceInfoToPool(int skillId, SkillInstanceInfo info)
 {
     if (m_SkillInstancePool.ContainsKey(skillId))
     {
         List <SkillInstanceInfo> infos = m_SkillInstancePool[skillId];
         infos.Add(info);
     }
     else
     {
         List <SkillInstanceInfo> infos = new List <SkillInstanceInfo>();
         infos.Add(info);
         m_SkillInstancePool.Add(skillId, infos);
     }
 }
示例#8
0
        private void AnalyzeNpcSkills(int skillId, ref List <int> impacts, ref List <string> resources)
        {
            SkillInstanceInfo instance = NewSkillInstance(skillId);

            if (null != instance)
            {
                instance.m_SkillInstance.Analyze(null);
                impacts.AddRange(instance.m_SkillInstance.EnableImpactsToOther);
                resources.AddRange(instance.m_SkillInstance.Resources);
                foreach (int npcSkillId in instance.m_SkillInstance.SummonNpcSkills)
                {
                    AnalyzeNpcSkills(npcSkillId, ref impacts, ref resources);
                }
                RecycleSkillInstance(instance);
            }
        }
示例#9
0
        private SkillInstanceInfo GetUnusedSkillInstanceInfoFromPool(int skillId)
        {
            SkillInstanceInfo info = null;

            if (m_SkillInstancePool.TryGetValue(skillId, out List <SkillInstanceInfo> infos))
            {
                foreach (var skillInfo in infos)
                {
                    if (!skillInfo.IsUsed)
                    {
                        info = skillInfo;
                        break;
                    }
                }
            }
            return(info);
        }
示例#10
0
        private SkillInstanceInfo NewSkillInstance(int skillId)
        {
            SkillInstanceInfo instanceInfo = GetUnusedSkillInstanceInfoFromPool(skillId);

            if (null == instanceInfo)
            {
                //do load
                if (!SkillScriptsManager.Instance.LoadIfNotExits(skillId, 0))
                {
                    SkillConfig config = SkillConfigProvider.Instance.GetSkillConfig(skillId);
                    if (null != config)
                    {
                        ConfigManager.Instance.LoadIfNotExist(skillId, 0, HomePath.Instance.GetAbsolutePath(config.Script));
                    }
                }

                IInstance instance = ConfigManager.Instance.NewInstance(skillId, 0);
                if (null == instance)
                {
                    LogUtil.Error("Can't load skill config, skill:{0}!", skillId);
                }
                if (instance is CSharpInstance cshapInstance)
                {
                    cshapInstance.Init();
                    instance = cshapInstance.Clone();
                }

                SkillInstanceInfo res = new SkillInstanceInfo
                {
                    SkillId       = skillId,
                    SkillInstance = instance,
                    BreakSections = new List <BreakSection>(),
                    IsUsed        = true
                };

                AddStoryInstanceInfoToPool(skillId, res);
                return(res);
            }
            else
            {
                instanceInfo.IsUsed = true;
                return(instanceInfo);
            }
        }
        private SkillInstanceInfo GetUnusedSkillInstanceInfoFromPool(int skillId)
        {
            SkillInstanceInfo        info = null;
            List <SkillInstanceInfo> infos;

            if (m_SkillInstancePool.TryGetValue(skillId, out infos))
            {
                int ct = infos.Count;
                for (int ix = 0; ix < ct; ++ix)
                {
                    if (!infos[ix].m_IsUsed)
                    {
                        info = infos[ix];
                        break;
                    }
                }
            }
            return(info);
        }
示例#12
0
        private SkillInstanceInfo GetUnusedSkillInstanceInfoFromPool(int skillId)
        {
            SkillInstanceInfo info = null;

            if (m_SkillInstancePool.ContainsKey(skillId))
            {
                List <SkillInstanceInfo> infos = m_SkillInstancePool[skillId];
                int ct = infos.Count;
                for (int ix = 0; ix < ct; ++ix)
                {
                    if (!infos[ix].m_IsUsed)
                    {
                        info = infos[ix];
                        break;
                    }
                }
            }
            return(info);
        }
示例#13
0
        private void PreloadNewSkillInstance(int skillId)
        {
            SkillLogicData skillData = SkillConfigProvider.Instance.ExtractData(SkillConfigType.SCT_SKILL, skillId) as SkillLogicData;

            if (null != skillData)
            {
                string filePath = HomePath.GetAbsolutePath(FilePathDefine_Client.C_SkillDslPath + skillData.SkillDataFile);
                SkillConfigManager.Instance.LoadSkillIfNotExist(skillId, filePath);
                SkillInstance inst = SkillConfigManager.Instance.NewSkillInstance(skillId);
                if (inst != null)
                {
                    SkillInstanceInfo res = new SkillInstanceInfo();
                    res.m_SkillId       = skillId;
                    res.m_SkillInstance = inst;
                    res.m_IsUsed        = true;
                    AddSkillInstanceInfoToPool(skillId, res);
                    RecycleSkillInstance(res);
                }
            }
        }
        private SkillInstanceInfo NewInnerSkillInstance(int skillId, SkillInstance innerInstance)
        {
            int newSkillId = CalcUniqueInnerSkillId(skillId, innerInstance);

            if (newSkillId <= 0)
            {
                return(null);
            }
            SkillInstanceInfo instInfo = GetUnusedSkillInstanceInfoFromPool(newSkillId);

            if (null == instInfo)
            {
                return(NewInnerSkillInstanceImpl(skillId, innerInstance));
            }
            else
            {
                instInfo.m_IsUsed = true;
                return(instInfo);
            }
        }
示例#15
0
        private SkillInstanceInfo NewSkillInstance(int skillId)
        {
            SkillInstanceInfo instInfo = GetUnusedSkillInstanceInfoFromPool(skillId);

            if (null == instInfo)
            {
                SkillLogicData skillData = SkillConfigProvider.Instance.ExtractData(SkillConfigType.SCT_SKILL, skillId) as SkillLogicData;
                if (null != skillData)
                {
                    string filePath = HomePath.GetAbsolutePath(FilePathDefine_Server.C_SkillDslPath + skillData.SkillDataFile);
                    SkillConfigManager.Instance.LoadSkillIfNotExist(skillId, filePath);
                    SkillInstance inst = SkillConfigManager.Instance.NewSkillInstance(skillId);

                    if (null != inst)
                    {
                        SkillInstanceInfo res = new SkillInstanceInfo();
                        res.m_SkillId       = skillId;
                        res.m_SkillInstance = inst;
                        res.m_IsUsed        = true;

                        AddSkillInstanceInfoToPool(skillId, res);
                        return(res);
                    }
                    else
                    {
                        LogSystem.Error("Can't find skill dsl or skill dsl error, skill:{0} !", skillId);
                        return(null);
                    }
                }
                else
                {
                    LogSystem.Error("Can't find skill config, skill:{0} !", skillId);
                    return(null);
                }
            }
            else
            {
                instInfo.m_IsUsed = true;
                return(instInfo);
            }
        }
        private SkillInstanceInfo NewInnerSkillInstanceImpl(int skillId, SkillInstance innerInstance)
        {
            int newSkillId = CalcUniqueInnerSkillId(skillId, innerInstance);

            if (newSkillId <= 0)
            {
                return(null);
            }
            SkillInstance newInst = innerInstance.Clone();

            newInst.DslSkillId = skillId;

            SkillInstanceInfo res = new SkillInstanceInfo();

            res.m_SkillId       = skillId;
            res.m_SkillInstance = newInst;
            res.m_IsUsed        = true;

            AddSkillInstanceInfoToPool(newSkillId, res);
            return(res);
        }
        private SkillInstanceInfo NewSkillInstanceImpl(int skillId, TableConfig.Skill skillData)
        {
            string filePath = GameFramework.HomePath.GetAbsolutePath(FilePathDefine_Client.C_DslPath + skillData.dslFile);

            SkillConfigManager.Instance.LoadSkillIfNotExist(skillData.id, filePath);
            SkillInstance inst = SkillConfigManager.Instance.NewSkillInstance(skillData.id);

            if (inst == null)
            {
                GameFramework.LogSystem.Error("Can't load skill config, skill:{0} !", skillId);
                return(null);
            }
            SkillInstanceInfo res = new SkillInstanceInfo();

            res.m_SkillId       = skillId;
            res.m_SkillInstance = inst;
            res.m_IsUsed        = true;

            AddSkillInstanceInfoToPool(skillId, res);
            return(res);
        }
        private SkillInstanceInfo NewSkillInstance(int skillId, TableConfig.Skill skillData)
        {
            SkillInstanceInfo instInfo = GetUnusedSkillInstanceInfoFromPool(skillId);

            if (null == instInfo)
            {
                if (null != skillData)
                {
                    return(NewSkillInstanceImpl(skillId, skillData));
                }
                else
                {
                    GameFramework.LogSystem.Error("Can't find skill config, skill:{0} TableConfig.Skill is null!", skillId);
                    return(null);
                }
            }
            else
            {
                instInfo.m_IsUsed = true;
                return(instInfo);
            }
        }
示例#19
0
        private List <int> AnalyzeNpcSkills(int skillId, SkillInstance owner)
        {
            List <int>        impacts  = new List <int>();
            SkillInstanceInfo instance = NewSkillInstance(skillId);

            if (null != instance)
            {
                instance.m_SkillInstance.Analyze(null);
                impacts.AddRange(instance.m_SkillInstance.EnableImpactsToOther);
                if (instance.m_SkillInstance.IsSimulate)
                {
                    owner.IsSimulate       = true;
                    owner.MaxSkillLifeTime = instance.m_SkillInstance.MaxSkillLifeTime;
                }
                foreach (int npcSkillId in instance.m_SkillInstance.SummonNpcSkills)
                {
                    List <int> npcImpacts = AnalyzeNpcSkills(npcSkillId, owner);
                    impacts.AddRange(npcImpacts);
                }
                RecycleSkillInstance(instance);
            }
            return(impacts);
        }
示例#20
0
 private void RecycleSkillInstance(SkillInstanceInfo info)
 {
     info.SkillInstance.Reset();
     info.BreakSections.Clear();
     info.IsUsed = false;
 }
        private SkillInstanceInfo NewInnerSkillInstanceImpl(int skillId, SkillInstance innerInstance)
        {
            int newSkillId = CalcUniqueInnerSkillId(skillId, innerInstance);
            if (newSkillId <= 0)
                return null;
            SkillInstance newInst = innerInstance.Clone();
            newInst.DslSkillId = skillId;

            SkillInstanceInfo res = new SkillInstanceInfo();
            res.m_SkillId = skillId;
            res.m_SkillInstance = newInst;
            res.m_IsUsed = true;

            AddSkillInstanceInfoToPool(newSkillId, res);
            return res;
        }
示例#22
0
 private void AddSkillInstanceInfoToPool(int skillId, SkillInstanceInfo info)
 {
     if (m_SkillInstancePool.ContainsKey(skillId))
     {
         List<SkillInstanceInfo> infos = m_SkillInstancePool[skillId];
         infos.Add(info);
     }
     else
     {
         List<SkillInstanceInfo> infos = new List<SkillInstanceInfo>();
         infos.Add(info);
         m_SkillInstancePool.Add(skillId, infos);
     }
 }
示例#23
0
        private SkillInstanceInfo NewSkillInstance(int skillId)
        {
            SkillInstanceInfo instInfo = GetUnusedSkillInstanceInfoFromPool(skillId);
            if (null == instInfo)
            {
                string filePath = GetSkillFilePath(skillId);
                if (string.IsNullOrEmpty(filePath))
                {
                    SkillConfigManager.Instance.LoadSkillIfNotExist(skillId, filePath);
                    SkillInstance inst = SkillConfigManager.Instance.NewSkillInstance(skillId);

                    if (inst == null)
                    {
                        Logger.Error("Can't load skill config, skill:{0} !", skillId);
                        return null;
                    }
                    SkillInstanceInfo res = new SkillInstanceInfo();
                    res.m_SkillId = skillId;
                    res.m_SkillInstance = inst;
                    res.m_IsUsed = true;

                    AddSkillInstanceInfoToPool(skillId, res);
                    return res;
                }
                else
                {
                    Logger.Error("Can't find skill config, skill:{0} !", skillId);
                    return null;
                }
            }
            else
            {
                instInfo.m_IsUsed = true;
                return instInfo;
            }
        }
示例#24
0
        internal void StartSkill(int objId, int skillId)
        {
            CharacterInfo obj = CurScene.SceneContext.GetCharacterInfoById(objId);

            if (null != obj)
            {
                SkillInstanceInfo inst = NewSkillInstance(skillId);
                if (null != inst)
                {
                    obj.GetSkillStateInfo().SetCurSkillInfo(skillId);
                    SkillInfo skillInfo = obj.GetSkillStateInfo().GetCurSkillInfo();
                    if (null != skillInfo)
                    {
                        if (MakeSkillCast(obj, skillInfo))
                        {
                            ArkCrossEngineMessage.Msg_RC_SyncProperty propBuilder = DataSyncUtility.BuildSyncPropertyMessage(obj);
                            Scene scene = obj.SceneContext.CustomData as Scene;
                            if (null != scene)
                            {
                                scene.NotifyAllUser(propBuilder);
                            }
                        }
                        else
                        {
                            skillInfo.m_EnableImpactsToMyself = null;
                            skillInfo.m_EnableImpactsToOther  = null;
                            skillInfo.m_LeftEnableMoveCount   = 0;
                            skillInfo.m_LeftEnableImpactsToMyself.Clear();
                            skillInfo.m_LeftEnableImpactsToOther.Clear();
                            return;
                        }
                        skillInfo.IsSkillActivated = true;

                        m_SkillLogicInfos.Add(new SkillLogicInfo(objId, inst));
                        SkillLogicInfo logicInfo = m_SkillLogicInfos.Find(info => info.SenderId == objId && info.SkillId == skillId);
                        if (null != logicInfo)
                        {
                            //目前没有与技能释放者相关的分析属性,对每个技能暂时只需要分析一次
                            if (null == skillInfo.m_EnableImpactsToMyself || null == skillInfo.m_EnableImpactsToOther)
                            {
                                if (!logicInfo.SkillInst.AlreadyAnalyzed)
                                {
                                    logicInfo.SkillInst.Analyze(obj);
                                    foreach (int skill in logicInfo.SkillInst.SummonNpcSkills)
                                    {
                                        List <int> impacts = AnalyzeNpcSkills(skill, logicInfo.SkillInst);
                                        logicInfo.SkillInst.EnableImpactsToOther.AddRange(impacts);
                                    }
                                }
                                skillInfo.m_EnableMoveCount       = logicInfo.SkillInst.EnableMoveCount;
                                skillInfo.m_MaxMoveDistance       = logicInfo.SkillInst.MaxMoveDelta;
                                skillInfo.m_EnableImpactsToOther  = logicInfo.SkillInst.EnableImpactsToOther;
                                skillInfo.m_EnableImpactsToMyself = logicInfo.SkillInst.EnableImpactsToMyself;
                                skillInfo.m_EnableSummonNpcs      = logicInfo.SkillInst.SummonNpcs;

                                /*
                                 * LogSys.Log(LOG_TYPE.WARN, "Skill {0} EnableMoveCount {1} MaxMoveDistanceSqr {2}\n\tEnableImpactsToOther {3}\n\tEnableImpactsToMyself {4}\n\tSummonNpcSkills {5}", skillId, skillInfo.m_EnableMoveCount, skillInfo.m_MaxMoveDistanceSqr,
                                 * string.Join<int>(",", skillInfo.m_EnableImpactsToOther),
                                 * string.Join<int>(",", skillInfo.m_EnableImpactsToMyself),
                                 * string.Join<int>(",", logicInfo.SkillInst.SummonNpcSkills));
                                 */
                            }
                            skillInfo.m_LeftEnableMoveCount = skillInfo.m_EnableMoveCount;
                            skillInfo.m_LeftEnableImpactsToMyself.AddRange(skillInfo.m_EnableImpactsToMyself);
                            skillInfo.m_LeftEnableImpactsToOther.Clear();
                            if (logicInfo.SkillInst.IsSimulate)
                            {
                                obj.GetSkillStateInfo().SimulateEndTime = TimeUtility.GetServerMilliseconds() + logicInfo.SkillInst.MaxSkillLifeTime;
                            }

                            logicInfo.SkillInst.Start(obj);

                            /*
                             * DashFire.LogSystem.Warn("StartSkill {0} {1} EnableMoveCount {2} MaxMoveDistance {3}\n\tEnableImpactsToOther {4}\n\tEnableImpactsToMyself {5}\n\tSummonNpcSkills {6}", objId, skillId, skillInfo.m_LeftEnableMoveCount, skillInfo.m_MaxMoveDistanceSqr,
                             * string.Join<int>(",", skillInfo.m_EnableImpactsToOther),
                             * string.Join<int>(",", skillInfo.m_EnableImpactsToMyself),
                             * string.Join<int>(",", logicInfo.SkillInst.SummonNpcSkills));
                             */
                        }
                    }
                    else
                    {
                        LogSystem.Error("{0} StartSkill can't find skill {1}", objId, skillId);
                    }
                }
            }
            else
            {
                LogSystem.Debug("not find game obj by id " + objId);
            }
        }
        public bool StartSkill(int actorId, TableConfig.Skill configData, int seq, params Dictionary <string, object>[] locals)
        {
            bool ret = false;

            if (null == configData)
            {
                LogSystem.Error("{0} can't cast skill, config is null !", actorId, seq);
                Helper.LogCallStack();
                return(false);
            }
            if (!EntityController.Instance.CanCastSkill(actorId, configData, seq))
            {
                EntityController.Instance.CancelCastSkill(actorId);
                LogSystem.Warn("{0} can't cast skill {1} {2}, cancel.", actorId, configData.id, seq);
                EntityController.Instance.CancelIfImpact(actorId, configData, seq);
                return(false);
            }
            GfxSkillSenderInfo senderInfo = EntityController.Instance.BuildSkillInfo(actorId, configData, seq);

            if (null != senderInfo && null != senderInfo.GfxObj)
            {
                int            skillId   = senderInfo.SkillId;
                GameObject     obj       = senderInfo.GfxObj;
                SkillLogicInfo logicInfo = m_SkillLogicInfos.Find(info => info.GfxObj == obj && info.SkillId == skillId && info.Seq == seq);
                if (logicInfo != null)
                {
                    LogSystem.Warn("{0} is casting skill {1} {2}, cancel.", actorId, skillId, seq);
                    EntityController.Instance.CancelIfImpact(actorId, configData, seq);
                    return(false);
                }
                SkillInstanceInfo inst          = null;
                SkillInstance     innerInstance = null;
                if (skillId == PredefinedSkill.c_EmitSkillId)
                {
                    for (int i = 0; i < locals.Length; ++i)
                    {
                        object instObj;
                        if (locals[i].TryGetValue("emitskill", out instObj))
                        {
                            innerInstance = instObj as SkillInstance;
                        }
                    }
                    if (null == innerInstance)
                    {
                        LogSystem.Warn("{0} use predefined skill {1} {2} but not found emitskill, cancel.", actorId, skillId, seq);
                        //EntityController.Instance.CancelIfImpact(actorId, configData, seq);
                        //return false;
                    }
                }
                else if (skillId == PredefinedSkill.c_HitSkillId)
                {
                    for (int i = 0; i < locals.Length; ++i)
                    {
                        object instObj;
                        if (locals[i].TryGetValue("hitskill", out instObj))
                        {
                            innerInstance = instObj as SkillInstance;
                        }
                    }
                    if (null == innerInstance)
                    {
                        LogSystem.Warn("{0} use predefined skill {1} {2} but not found hitskill, cancel.", actorId, skillId, seq);
                        //EntityController.Instance.CancelIfImpact(actorId, configData, seq);
                        //return false;
                    }
                }
                if (null == innerInstance)
                {
                    inst = NewSkillInstance(skillId, senderInfo.ConfigData);
                }
                else
                {
                    inst = NewInnerSkillInstance(skillId, innerInstance);
                }
                if (null != inst)
                {
                    m_SkillLogicInfos.Add(new SkillLogicInfo(senderInfo, inst));
                }
                else
                {
                    LogSystem.Warn("{0} cast skill {1} {2}, alloc failed.", actorId, skillId, seq);
                    EntityController.Instance.CancelIfImpact(actorId, configData, seq);
                    return(false);
                }

                logicInfo = m_SkillLogicInfos.Find(info => info.GfxObj == obj && info.SkillId == skillId && info.Seq == seq);
                if (null != logicInfo)
                {
                    if (null != locals)
                    {
                        int localCount = locals.Length;
                        for (int i = 0; i < localCount; ++i)
                        {
                            foreach (KeyValuePair <string, object> pair in locals[i])
                            {
                                logicInfo.SkillInst.SetVariable(pair.Key, pair.Value);
                            }
                        }
                    }
                    GameObject target = senderInfo.TargetGfxObj;
                    if (null != target && target != obj && configData.type == (int)SkillOrImpactType.Skill)
                    {
                        Trigers.TriggerUtil.Lookat(obj, target.transform.position);
                    }
                    EntityController.Instance.ActivateSkill(actorId, skillId, seq);
                    logicInfo.SkillInst.Start(logicInfo.Sender);
                    ret = true;
                }
            }
            return(ret);
        }
示例#26
0
 private void RecycleSkillInstance(SkillInstanceInfo info)
 {
     info.m_SkillInstance.Reset();
     info.m_IsUsed = false;
 }
 public SkillLogicInfo(GfxSkillSenderInfo sender, SkillInstanceInfo info)
 {
     m_Sender    = sender;
     m_SkillInfo = info;
 }
 internal SkillLogicInfo(GfxSkillSenderInfo sender, SkillInstanceInfo info)
 {
     m_Sender = sender;
     m_SkillInfo = info;
 }
示例#29
0
 public SkillLogicInfo(GameObject obj, SkillInstanceInfo info)
 {
     m_Sender    = obj;
     m_SkillInfo = info;
 }
示例#30
0
 private void RecycleSkillInstance(SkillInstanceInfo info)
 {
     info.m_SkillInstance.Reset();
     info.m_IsUsed = false;
 }
 private void RecycleSkillInstance(SkillInstanceInfo info)
 {
     info.Recycle();
 }
 private void RecycleSkillInstance(SkillInstanceInfo info)
 {
     info.Recycle();
 }
        private SkillInstanceInfo NewSkillInstanceImpl(int skillId, TableConfig.Skill skillData)
        {
            string filePath = GameFramework.HomePath.GetAbsolutePath(FilePathDefine_Server.C_DslPath + skillData.dslFile);
            SkillConfigManager.Instance.LoadSkillIfNotExist(skillData.dslSkillId, filePath);
            SkillInstance inst = SkillConfigManager.Instance.NewSkillInstance(skillData.dslSkillId);

            if (inst == null) {
                GameFramework.LogSystem.Error("Can't load skill config, skill:{0} dsl skill:{1}!", skillId, skillData.dslSkillId);
                return null;
            }
            SkillInstanceInfo res = new SkillInstanceInfo();
            res.m_SkillId = skillId;
            res.m_SkillInstance = inst;
            res.m_IsUsed = true;

            AddSkillInstanceInfoToPool(skillId, res);
            return res;
        }
示例#34
0
 internal SkillLogicInfo(int objId, SkillInstanceInfo info)
 {
     m_SenderId  = objId;
     m_SkillInfo = info;
 }
 private void AddSkillInstanceInfoToPool(int skillId, SkillInstanceInfo info)
 {
     List<SkillInstanceInfo> infos;
     if (m_SkillInstancePool.TryGetValue(skillId, out infos)) {
         infos.Add(info);
     } else {
         infos = new List<SkillInstanceInfo>();
         infos.Add(info);
         m_SkillInstancePool.Add(skillId, infos);
     }
 }
示例#36
0
 public SkillLogicInfo(GameObject obj, SkillInstanceInfo info)
 {
     m_Sender = obj;
     m_SkillInfo = info;
 }