/// <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); }
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); } }
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); } }
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); }