Esempio n. 1
0
        /// <summary>
        /// ѡ���Ƿ�����
        /// </summary>
        /// <param name="actor"></param>
        /// <returns></returns>
        public int ChooseSkillID(ActorObj actor)
        {
            if (actor == null)
            {
                return(-1);
            }
            MsgData_sResArenaMemVo player = null;

            if (mArenaFighters[0].RoleID == actor.ServerID)
            {
                player = mArenaFighters[0];
            }
            else
            {
                player = mArenaFighters[1];
            }

            int skillID  = -1;
            int priority = 0;

            for (int i = 0; i < player.SkillIDs.Length; i++)
            {
                int id = player.SkillIDs[i];
                if (id == 0)
                {
                    continue;
                }
                if (IsInCDTime(actor.ServerID, id))
                {
                    continue;
                }

                //ѡ�����ȼ����ߵ�
                LuaTable skillDesc = ConfigManager.Instance.Skill.GetSkillConfig(id);
                if (skillDesc != null)
                {
                    if (skillDesc.Get <int>("priority") > priority)
                    {
                        priority = skillDesc.Get <int>("priority");
                        skillID  = id;
                    }
                }
            }

            if (skillID != -1)
            {
                SetSkillCastTime(actor.ServerID, skillID, Time.time);
            }

            return(skillID);
        }
Esempio n. 2
0
        private void LoadFigters()
        {
            for (int i = 0; i < 2; i++)
            {
                if (i == mLocalIndex)
                {
                    continue;
                }

                MsgData_sResArenaMemVo player = ArenaFighters[i];
                int modelID = SceneLoader.GetClothesModelID(player.FashionDress, player.Dress, player.Job, 0);

                GameObject obj = CoreEntry.gSceneLoader.CreateGameObject(modelID);
                if (obj == null)
                {
                    return;
                }
                ActorObj actorObject = null;
                actorObject = obj.GetComponent <ActorObj>();
                if (null != actorObject)
                {
                    UnityEngine.Object.DestroyImmediate(actorObject);
                }

                PlayerAgent agent = obj.GetComponent <PlayerAgent>();
                if (null != agent)
                {
                    agent.enabled = false;
                }

                Vector3 position = Vector3.zero;
                position.x = initPos[1 - mLocalIndex].x;
                position.z = initPos[1 - mLocalIndex].y;
                position.y = CommonTools.GetTerrainHeight(new Vector2(position.x, position.y));

                obj.transform.position   = position;
                obj.transform.rotation   = Quaternion.identity;
                obj.transform.localScale = Vector3.one;

                OtherPlayer otherPlayer = obj.AddComponent <OtherPlayer>();
                otherPlayer.Init(modelID, modelID, player.RoleID, "", true);
                otherPlayer.ServerID = player.RoleID;
                CoreEntry.gActorMgr.AddActorObj(otherPlayer);

                int weaponID = SceneLoader.GetWeaponModelID(player.FashionWeapon, player.ShenBing, player.Weapon, player.Job);
                LoadWeapon(obj.transform, weaponID, player.Job == 4);
            }
        }
Esempio n. 3
0
        private void OnEnterArenaData(GameEvent ge, EventParameter parameter)
        {
            NetReadBuffer buffer = parameter.objParameter as NetReadBuffer;

            CacheEnterHead.unpack(buffer);
            buffer.pos = 0;                                                       //重新给具体类型的消息读取

            if (CacheEnterHead.ObjType == (sbyte)EnEntType.EntType_VirtualPlayer) //EntType_VirtualPlayer
            {
                MsgData_sResArenaMemVo sstaticStruct = new MsgData_sResArenaMemVo();
                sstaticStruct.unpack(buffer);

                Debug.LogError(sstaticStruct.RoleID + "   " + sstaticStruct.Name);
                //CacheSceneObj(EnEntType.EntType_VirtualPlayer, sstaticStruct.Guid, sstaticStruct);
            }
        }
Esempio n. 4
0
        public void OnSkillDamage(DamageParam damageParam)
        {
            long attkerID   = damageParam.attackActor.ServerID;
            int  behitIndex = 0;

            MsgData_sResArenaMemVo attker  = null;
            MsgData_sResArenaMemVo beAtker = null;

            if (attkerID == mArenaFighters[0].RoleID)
            {
                attker     = mArenaFighters[0];
                beAtker    = mArenaFighters[1];
                behitIndex = 1;
            }
            else
            {
                attker     = mArenaFighters[1];
                beAtker    = mArenaFighters[0];
                behitIndex = 0;
            }

            double dmg_value      = .0f;
            double extra_attr_dmg = .0f;
            double attack_dmg     = attker.Atk;

            //1.�����Ƿ�����,Э��û�������ֶΣ���ȥ��

            int src_level = (int)attker.Level;
            int dst_level = (int)beAtker.Level;
            //2.��������,����������
            // ����������;
            string dmgParam = ConfigManager.Instance.Consts.GetValue <string>(3, "param");

            string[] param1 = dmgParam.Split(',');
            float    nVal1  = .0f;
            float    nVal2  = .0f;

            if (param1.Length == 2)
            {
                if (!float.TryParse(param1[0], out nVal1))
                {
                    nVal1 = .0f;
                }
                if (!float.TryParse(param1[1], out nVal2))
                {
                    nVal2 = .0f;
                }
            }

            LuaTable lvupCfg      = ConfigManager.Instance.Actor.GetLevelUpConfig(dst_level);
            double   aviod_param1 = lvupCfg.Get <float>("lv_pvesubdamage");

            dmgParam = ConfigManager.Instance.Consts.GetValue <string>(61, "param");
            param1   = dmgParam.Split('#');
            double aviod_param2 = 0.8f;
            double aviod_param3 = 0.0f;

            string[] param2 = null;
            if (param1.Length > 1)
            {
                param2 = param1[1].Split(',');
            }
            if (null != param2 && param2.Length == 2)
            {
                if (!double.TryParse(param2[0], out aviod_param2))
                {
                    aviod_param2 = 0.8f;
                }
                if (!double.TryParse(param2[1], out aviod_param3))
                {
                    aviod_param3 = 0.0f;
                }
            }

            double damage_f1 = 0.0f;
            double damage_f2 = 0.0f;
            double damage_f3 = 0.0f;
            double dst_def   = Math.Max(1, beAtker.Def - attker.SubDef);

            double dst_avoid_rate = (dst_def / (dst_def + dst_level * aviod_param1)) * aviod_param2 + aviod_param3;

            damage_f1 = (attack_dmg * UnityEngine.Random.Range(nVal1, nVal2) * (1.0f) + extra_attr_dmg) * (1 - dst_avoid_rate);

            // �����Ƿ񱩻�;
            param2 = null;
            if (param1.Length > 2)
            {
                param2 = param1[2].Split(',');
            }
            double critical_param1 = 0.6f;
            double critical_param2 = 0.0f;
            double critical_param3 = 3.0f;

            if (null != param2 && param2.Length == 3)
            {
                if (!double.TryParse(param2[0], out critical_param1))
                {
                    critical_param1 = 0.6f;
                }
                if (!double.TryParse(param2[1], out critical_param2))
                {
                    critical_param2 = 0.0f;
                }
                if (!double.TryParse(param2[2], out critical_param3))
                {
                    critical_param3 = 3.0f;
                }
            }


            double cridam_param1 = 0.5f;
            double cridam_param2 = 0.2f;

            param2 = null;
            if (param1.Length > 3)
            {
                param2 = param1[3].Split(',');
            }
            if (null != param2 && param2.Length == 2)
            {
                if (!double.TryParse(param2[0], out cridam_param1))
                {
                    cridam_param1 = 0.5f;
                }
                if (!double.TryParse(param2[1], out cridam_param2))
                {
                    cridam_param2 = 0.2f;
                }
            }

            double src_critical     = attker.Cri;
            double src_critical_dmg = attker.CriValue;
            double puncture         = attker.AbsAtk;
            double dst_tenacity     = beAtker.DefCri;
            double dst_critical_def = beAtker.SubCri;
            double critical_rate    = 0.0f;

            critical_rate = (src_critical / (src_critical + dst_tenacity * critical_param3)) * critical_param1 + critical_param2;

            double critical_dmg = Math.Max((src_critical_dmg - dst_critical_def + cridam_param1), cridam_param2);             // ����;
            bool   isCritical   = false;

            if (UnityEngine.Random.Range(0.0f, 1.0f) < critical_rate)
            {
                isCritical = true;
                damage_f2  = (damage_f1 + puncture) * (1 + critical_dmg);
            }
            else
            {
                isCritical = false;
                damage_f2  = (damage_f1 + puncture);
            }

            // �����Ƿ񷢶�����,Э��û�������ֶΣ���ȥ��

            // �����˺�;
            double mindmg_param = 0.5f;             //��С�˺�ϵ��;

            damage_f3 = Math.Max(src_level * mindmg_param, damage_f2);

            dmg_value = damage_f3;

            //3.�˺������ͼ���;
            dmg_value = dmg_value * (1 + (attker.DmgAdd * 0.01f));
            dmg_value = dmg_value * (1 - (beAtker.DmgSub * 0.01f));

            //4.�˺�ֵ�����ָ���;
            if (dmg_value <= 1)
            {
                dmg_value = 100.0;
            }

            ActorObj   behitActorObj = damageParam.behitActor;
            BehitParam behitParam    = new BehitParam();

            behitParam.displayType = DamageDisplayType.DDT_NORMAL;
            behitParam.hp          = (int)dmg_value;
            behitParam.damgageInfo = damageParam;
            behitActorObj.OnSkillBeHit(behitParam);

            DoCalHP(behitIndex, dmg_value, isCritical);
        }