コード例 #1
0
    public override void Init(xc.ActorMono begin_actor, xc.ActorMono end_actor, DBBulletTrace.BulletInfo bulletInfo, SkillAttackInstance inst)
    {
        base.Init(begin_actor, end_actor, bulletInfo, inst);

        mInitPoint = true;

        if (begin_actor == null || begin_actor.BindActor == null || end_actor == null || end_actor.BindActor == null)
        {
            GameDebug.LogError("[StretchComponent]Target is lost");
            DestroySelf();
            return;
        }

        if (bulletInfo == null)
        {
            GameDebug.LogError("[StretchComponent]BulletInfo is null");
            DestroySelf();
            return;
        }

        m_BulletInfo   = bulletInfo;
        m_BeginTrans   = begin_actor.BindActor.Trans;
        m_EndTrans     = end_actor.BindActor.Trans;
        mTarget        = end_actor;
        m_TargetHeight = end_actor.BindActor.Height;
        MoveSpeed      = bulletInfo.FlySpeed;

        // 先设置方向
        Vector3 vec = TargetPos - BeginPos;

        cacheTrans.position = BeginPos + vec * 0.1f;
        cacheTrans.rotation = Quaternion.LookRotation(vec);
        SetStretch(1, vec.magnitude * 0.1f);
        arrowReached = false;
    }
コード例 #2
0
    public override void Init(ActorMono src, ActorMono target, DBBulletTrace.BulletInfo bulletInfo, SkillAttackInstance inst)
    {
        base.Init(src, target, bulletInfo, inst);

        if (target == null || target.BindActor == null)
        {
            Debug.LogError("Target is lost");
            DestroySelf();
            return;
        }

        if (bulletInfo == null)
        {
            Debug.LogError("BulletInfo is null");
            DestroySelf();
            return;
        }

        m_BulletInfo    = bulletInfo;
        mTarget         = target;
        mTargetStartPos = TargetPos;
        mTraceSpeed     = bulletInfo.FlySpeed;
        float move_per_frame = mTraceSpeed * 0.0333f;

        mSqrReachRange = move_per_frame * move_per_frame;

        Vector3 dir = mTargetStartPos - cacheTrans.position;

        dir.Normalize();
        mTransDir = dir * mTraceSpeed;
    }
コード例 #3
0
        bool mHideEffect        = false;                                                                                                          // 是否隐藏子弹特效

        /// <summary>
        /// 初始化
        /// </summary>
        public bool Init()
        {
            m_SkillInfo = DBSkillSev.Instance.GetSkillInfo(SkillID);
            m_SubEmitId = (ulong)(((ulong)ActorID << 32 & 0xffffffff00000000) | ((ulong)SkillID << 16 & 0xffffffffffff0000));  // 暂时使用技能ID和角色ID来进行组合
            if (m_SkillInfo != null && m_SkillInfo.BulletId != 0)
            {
                m_BulletInfo = DBBulletTrace.GetInstance().GetBulletInfo(m_SkillInfo.BulletId);
                if (m_BulletInfo != null)
                {
                    if (HitPlayers.Count > 0)
                    {
                        uint  hit_player_id = HitPlayers[0];
                        Actor src_player    = ActorManager.Instance.GetPlayer(ActorID);
                        Actor hitPlayer     = ActorManager.Instance.GetPlayer(hit_player_id);

                        if (src_player == null || hitPlayer == null || src_player.GetActorMono() == null || hitPlayer.GetActorMono() == null)
                        {
                            return(false);
                        }

                        ActorMono src_actormono = src_player.GetActorMono();
                        ActorMono hit_actormono = hitPlayer.GetActorMono();

                        BulletTrackInstance sub_bullet_trace = new xc.BulletTrackInstance(m_BulletInfo, m_SkillInfo, 0);
                        m_TraceInsts.Add(sub_bullet_trace);

                        // 开启新的BulletTrackInstance
                        mHideEffect = ShieldManager.Instance.IsHideBulletEffect(src_player, hitPlayer);
                        sub_bullet_trace.Do(m_SubEmitId, src_actormono, hit_actormono, mHideEffect, src_player.transform.position, src_player.transform.rotation, src_player.transform.forward, OnHit);

                        // 将伤害信息添加到新创建的SkillAttackInstance列表中
                        SkillAttackInstance attack_inst = EffectManager.GetInstance().GetAttackInstance(m_SubEmitId);
                        if (attack_inst != null)
                        {
                            Damage dmgInfo = null;
                            if (m_DamageInfos.TryGetValue(hit_player_id, out dmgInfo))
                            {
                                attack_inst.AddHurtInfo(dmgInfo);
                            }
                        }

                        m_HitEmits[hit_player_id] = new HitCacheInfo(m_SubEmitId);
                        m_SubEmitId++;

                        mLastThunderPlayer = hit_player_id;
                        HitPlayers.RemoveAt(0);
                        return(true);
                    }
                }
            }

            return(false);
        }
コード例 #4
0
        /// <summary>
        /// 销毁
        /// </summary>
        void Destroy()
        {
            SkillAttackInst.DestroyAll();
            SkillAttackInst = null;

            foreach (var bullet_trace in m_TraceInsts)
            {
                var skill_attack_id = bullet_trace.SkillAttackId;
                var attack_instance = EffectManager.Instance.GetAttackInstance(skill_attack_id);
                if (attack_instance != null)
                {
                    attack_instance.DestroyAll();
                }
            }
            m_TraceInsts.Clear();

            // 有可能有没有表现的受击效果
            foreach (var damg in m_DamageInfos.Values)
            {
                if (damg != null)
                {
                    damg.HitEffect();
                }
            }
            m_DamageInfos.Clear();
            foreach (var item in m_DeathAppendInfos.Values)
            {
                if (item != null)
                {
                    Actor actor = ActorManager.Instance.GetActor(item.Id);
                    if (actor != null)
                    {
                        actor.Kill();
                    }
                }
            }
            m_DeathAppendInfos.Clear();
            m_SkillInfo  = null;
            m_BulletInfo = null;
            HitPlayers.Clear();
            m_HitEmits.Clear();
        }
コード例 #5
0
    public override void Init(ActorMono src, ActorMono target, DBBulletTrace.BulletInfo bulletInfo, SkillAttackInstance inst)
    {
        base.Init(src, target, bulletInfo, inst);

        if (target == null || target.BindActor == null)
        {
            Debug.LogError("Target is lost");
            DestroySelf();
            return;
        }

        if (bulletInfo == null)
        {
            Debug.LogError("BulletInfo is null");
            DestroySelf();
            return;
        }

        m_BulletInfo = bulletInfo;
        mTarget      = target;
    }
コード例 #6
0
 public BulletTrackInstance(DBBulletTrace.BulletInfo bulllet_info, DBSkillSev.SkillInfoSev skill_info, float delayTime = -1.0f)
 {
     m_BulletInfo = bulllet_info;
     m_SkillInfo  = skill_info;
     if (delayTime < 0)
     {
         if (m_SkillInfo.BattleFxInfo != null)
         {
             m_DelayTime = m_SkillInfo.BattleFxInfo.HitDelayTime;
         }
         else
         {
             m_DelayTime = 0.1f;
             GameDebug.LogError(string.Format("skill, id: {0} has not battlefx info.", m_SkillInfo.Id));
         }
     }
     else
     {
         m_DelayTime = delayTime;
     }
 }
コード例 #7
0
ファイル: DBSkillSev.cs プロジェクト: wuhuolong/MaxBooks
        /// <summary>
        /// 获取表格中的技能数据
        /// </summary>
        public SkillInfoSev GetSkillInfo(uint skill_id)
        {
            SkillInfoSev skill_info = null;

            if (!mSkillInfoMap.TryGetValue(skill_id, out skill_info))
            {
                string query_str = string.Format("SELECT * FROM {0} WHERE {0}.{1}=\"{2}\"", "data_skill", "id", skill_id);

                var table_reader = DBManager.Instance.ExecuteSqliteQueryToReader(GlobalConfig.DBFile, "data_skill", query_str);
                if (table_reader == null)
                {
                    mSkillInfoMap[skill_id] = null;
                    return(null);
                }

                if (!table_reader.HasRows || !table_reader.Read())
                {
                    mSkillInfoMap[skill_id] = null;
                    table_reader.Close();
                    table_reader.Dispose();
                    return(null);
                }

                skill_info = new SkillInfoSev();

                skill_info.Id             = DBTextResource.ParseUI(GetReaderString(table_reader, "id"));
                skill_info.IsPg           = DBTextResource.ParseUS_s(GetReaderString(table_reader, "is_pg"), 0) == 1;
                skill_info.FindTargetType = DBTextResource.ParseUS_s(GetReaderString(table_reader, "find_target"), 1);
                skill_info.FindTarget     = skill_info.FindTargetType != 0;
                skill_info.TargetLimit    = GetReaderString(table_reader, "target_limit");
                skill_info.IsTrigger      = GetReaderString(table_reader, "action_type") != "active";
                skill_info.CDTime         = DBTextResource.ParseUI_s(GetReaderString(table_reader, "cd"), 0);
                skill_info.Range          = DBTextResource.ParseUI_s(GetReaderString(table_reader, "range"), 0) * 0.01f - 0.5f; // 因为服务端减少了容错,攻击范围变得更小了,所以这里减0.5
                skill_info.Range          = Mathf.Max(0f, skill_info.Range);
                skill_info.MpCost         = DBTextResource.ParseI_s(GetReaderString(table_reader, "cost"), 0);
                skill_info.Target         = GetReaderString(table_reader, "target");

                skill_info.ForwardSpeed = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "forward_move_speed"), 0) * 0.01f;
                skill_info.ForwardTime  = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "forward_move_time"), 0) * GlobalConst.MilliToSecond;
                skill_info.MaxSingTime  = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "max_sing_time"), 0) * GlobalConst.MilliToSecond;
                skill_info.CastingSpeed = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "casting_move_speed"), 0) * 0.01f;
                skill_info.CastingTime  = (float)DBTextResource.ParseI_s(GetReaderString(table_reader, "casting_move_time"), 0) * GlobalConst.MilliToSecond;
                skill_info.BulletId     = DBTextResource.ParseUI_s(GetReaderString(table_reader, "bullet_id"), 0);

                skill_info.ParentSkillId           = DBTextResource.ParseUI_s(GetReaderString(table_reader, "parent_skill"), 0);
                skill_info.ChildSkillId            = DBTextResource.ParseUI_s(GetReaderString(table_reader, "child_skill"), 0);
                skill_info.AnimationName           = GetReaderString(table_reader, "skill_ani");
                skill_info.Sound                   = GetReaderString(table_reader, "skill_sound");
                skill_info.CastingReadyName        = GetReaderString(table_reader, "skill_sing_ani");
                skill_info.CastingAnimationName    = GetReaderString(table_reader, "skill_casting_ani");
                skill_info.CastingEndAnimationName = GetReaderString(table_reader, "skill_casting_end_ani");
                skill_info.RigidityTime            = DBTextResource.ParseUS_s(GetReaderString(table_reader, "rigidity_time"), 0) * GlobalConst.MilliToSecond;
                skill_info.CacheTime               = DBTextResource.ParseUS_s(GetReaderString(table_reader, "cache_time"), 0) * GlobalConst.MilliToSecond;
                skill_info.SkillAnnounce           = GetReaderString(table_reader, "skill_announce");

                skill_info.CostFury       = DBTextResource.ParseUI_s(GetReaderString(table_reader, "cost_fury"), 0);
                skill_info.GenFury        = DBTextResource.ParseUI_s(GetReaderString(table_reader, "gen_fury"), 0);
                skill_info.IsFalseHitBack = DBTextResource.ParseUS_s(GetReaderString(table_reader, "isFalseHitBack"), 0) == 1;

                skill_info.UiEffectIconList  = DBTextResource.ParseArrayString(GetReaderString(table_reader, "ui_effect_icon_list"), ",", true);
                skill_info.UiEffectSoundName = GetReaderString(table_reader, "ui_effect_sound");

                string[] ratios = TextHelper.GetTupleFromString(GetReaderString(table_reader, "multi_hit_ratio"));
                if (ratios != null)
                {
                    skill_info.MultiHitRatios = new List <float>();
                    for (int j = 0; j < ratios.Length; ++j)
                    {
                        float ratio = DBTextResource.ParseF(ratios[j]);
                        skill_info.MultiHitRatios.Add(ratio);
                    }
                }

                string[] delays = TextHelper.GetTupleFromString(GetReaderString(table_reader, "multi_hit_delay"));
                if (delays != null)
                {
                    skill_info.MultiHitDelayTimes = new List <float>();
                    for (int j = 0; j < delays.Length; ++j)
                    {
                        float delay = DBTextResource.ParseF(delays[j]);
                        skill_info.MultiHitDelayTimes.Add(delay);
                    }
                }

                if (skill_info.MultiHitDelayTimes != null && skill_info.MultiHitDelayTimes.Count != skill_info.MultiHitRatios.Count)
                {
                    string log = string.Format("SkillId: {0} 多段伤害系数与延迟时间不匹配", skill_info.Id);
                    Debug.LogError(log);
                }

                string[] effects = TextHelper.GetTupleFromString(GetReaderString(table_reader, "effects"));

                // 先把table_reader关闭,因为在GetBattleFxInfo和GetSkillEffectInfo中需要获取新的Reader
                table_reader.Close();
                table_reader.Dispose();

                // 获取技能特效参数
                DBBattleFx.BattleFxInfo battleInfo = DBBattleFx.Instance.GetBattleFxInfo(skill_info.Id);
                if (battleInfo != null)
                {
                    skill_info.BattleFxInfo = battleInfo;
                }
                else
                {
                    if (skill_info.IsTrigger == false)// 非触发类型的技能才需要战斗效果信息
                    {
                        GameDebug.LogError(string.Format("Skill: {0}没有对应的战斗效果信息", skill_info.Id));
                    }
                }

                // 追踪目标类型的子弹(依赖于battleInfo,所以要放在battleInfo数据读取之后)
                if (skill_info.BulletId != 0 && skill_info.IsTrigger == false)
                {
                    DBBulletTrace.BulletInfo bulletInfo = DBBulletTrace.GetInstance().GetBulletInfo(skill_info.BulletId);
                    if (bulletInfo != null)
                    {
                        skill_info.BulletTrace = new BulletTrackInstance(bulletInfo, skill_info);
                    }
                }

                // 获取技能效果参数
                if (effects != null)
                {
                    for (int j = 0; j < effects.Length; ++j)
                    {
                        uint effectId    = DBTextResource.ParseUI(effects[j]);
                        var  effect_info = DBSkillEffect.GetInstance().GetSkillEffectInfo(effectId);
                        if (effect_info == null)
                        {
                            string log = string.Format("SkillId: {0} 对应的技能效果Id: {1} 错误", skill_info.Id, effectId);
                            Debug.LogError(log);
                        }
                        else
                        {
                            if (effect_info.type == "charge" || effect_info.type == "teleport")// 冲锋、瞬移技能的移动速度参数放在效果表中配置
                            {
                                skill_info.CastingSpeed = effect_info.p1 * GlobalConst.UnitScale;
                                if (effect_info.type == "teleport")
                                {
                                    skill_info.Invisible = true;
                                }
                            }
                        }
                    }
                }

                mSkillInfoMap[skill_info.Id] = skill_info;
            }

            return(skill_info);
        }
コード例 #8
0
 public virtual void Init(xc.ActorMono s, xc.ActorMono d, DBBulletTrace.BulletInfo bulletInfo, SkillAttackInstance attackInst)
 {
     mSkillAttackInst = attackInst;
 }