public override void Active() { base.Active(); if (null == hero.BodyGo) { return; } KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(hero.property.lastHitSkillId, hero.property.tabID); Vector3 forward = hero.Position - attacker.Position; forward.Normalize(); hero.transform.position = hero.transform.position + (Vector3.up * 0.2f); if (!Bind()) { ActionMonsterDie action = new ActionMonsterDie(hero); action.attacker = attacker; action.IsPushStack = false; hero.DispatchEvent(ControllerCommand.SetActiveAction, action); hero.transform.position = hero.transform.position - (Vector3.up * 0.2f); return; } hero.BodyGo.animation.Stop(); float _f = 10f; _rootRB.velocity = forward * skillDisplay.PhysicsVelocity * Random.Range(0.8f, 1.2f); _rootRB.velocity += Vector3.up * skillDisplay.PhysicsVelocityUp * Random.Range(0.8f, 1.2f); _rootRB.angularVelocity = new Vector3(0, Random.Range(30f, 60f), 0); }
public override void Active() { base.Active(); KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(hero.property.lastHitSkillId, hero.property.tabID); Vector3 forward = hero.Position - attacker.Position; forward.Normalize(); jump.beginPosition = hero.Position; jump.dampen = true; if (null == skillDisplay) { height = 0; distance = 0; speed = 100f; jump.endPosition = KingSoftCommonFunction.NearPosition(hero.Position); } else { height = skillDisplay.DieJump; distance = skillDisplay.DieDistance; speed = skillDisplay.DieSpeed; jump.endSpeed = skillDisplay.DieSpeed2; jump.endPosition = KingSoftCommonFunction.NearPosition(hero.Position + forward * distance); } lookForward = new Vector3(-forward.x, 0f, -lookForward.z); jump.speed = speed; attackerPosition = attacker.transform.position; jump.height = height; jump.Active(); hero.DispatchEvent(ControllerCommand.CrossFadeAnimation, "dead", AMIN_MODEL.ONCE, false); }
public void OnSkillEffectOp(KProtoBuf buf, bool fristTime) { S2C_SKILL_EFFECT respond = buf as S2C_SKILL_EFFECT; KAttackEvent kaEvt = (KAttackEvent)respond.byAttackEvent; SceneEntity killerHero = GetSceneObject(respond.wCasterID) as SceneEntity; SceneEntity targetHero = GetSceneObject(respond.wTargetHeroID) as SceneEntity; if (null == targetHero) { return; } if (!fristTime && null == targetHero) { return; } targetHero.property.lastHitSkillId = respond.wSkillID; targetHero.property.lastAttackEvent = respond.byAttackEvent; if (null != targetHero.AnimCmp) { targetHero.AnimCmp.ResetFightingState(); } KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(targetHero.property.lastHitSkillId, 1); if (fristTime && null != killerHero) { KActiveSkill activeSkill = KConfigFileManager.GetInstance().GetActiveSkill(targetHero.property.lastHitSkillId, 1); if (null != activeSkill) { if (activeSkill.ClientCache) { if (null != killerHero.ActiveAction) { killerHero.ActiveAction.AddSkillEffectMessage(respond, Time.realtimeSinceStartup); return; } } else if (null != killerHero && skillDisplay.HitDelayTimeScale > 0.00001f) { float distance = Vector3.Distance(killerHero.Position, targetHero.Position); float _time = distance * skillDisplay.HitDelayTimeScale; DelayCallManager.instance.CallFunction(OnSkillEffectParam, _time, buf, false, targetHero, targetHero.property.hp - (int)respond.wDamage, Time.realtimeSinceStartup); return; } } } if (fristTime) { targetHero.property.fightHp = (int)(targetHero.property.hp - respond.wDamage); targetHero.property.updateFightHpTime = Time.realtimeSinceStartup; } if (targetHero.property.heroObjType == KHeroObjectType.hotPlayer) { if (null != targetHero.AnimCmp) { targetHero.AnimCmp.ResetFightingState(); } } targetHero.Action.PlayFightEffect(respond.wSkillID, (int)respond.wDamage, respond.byAttackEvent, killerHero); }
public void SkillSelf(AnimActionParam param, KSkillDisplay skillDisplay, bool isPushStack) { ActionByAnim action = new ActionByAnim(Owner); action.InitParam(param, skillDisplay); action.IsPushStack = isPushStack; if (!action.IsCanActive()) { return; } Owner.DispatchEvent(ControllerCommand.SetActiveAction, action); }
public KSkillDisplay GetSkillDisplay(uint skillID, uint HeroID) { if (skillDisplay != null) { KSkillDisplay r = skillDisplay.getData(skillID + "_" + HeroID); if (null == r) { r = skillDisplay.getData(skillID + "_0"); } return(r); } return(null); }
public void ToDead(SceneEntity killer) { if (null != killer) { KingSoftCommonFunction.LootAt(Owner.gameObject, killer.gameObject); } Owner.property.fightHp = 0; if (Owner.HeroType == KHeroObjectType.hotMonster) { if (null != killer && killer.property.isMainHero) { HitPanelView.GetInstance().hit(); } KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(Owner.property.lastHitSkillId, Owner.property.tabID); if (Owner.property.lastAttackEvent == (byte)KAttackEvent.aeCrit || skillDisplay.DeadType == KSkillDisplay.DEAD_TYPE.BOMB) { ActionBomb action = new ActionBomb(Owner); action.IsPushStack = false; Owner.DispatchEvent(ControllerCommand.SetActiveAction, action); } else if (skillDisplay.DeadType == KSkillDisplay.DEAD_TYPE.PHYSICS) { ActionPlysiceDie action = new ActionPlysiceDie(Owner); action.attacker = killer; action.IsPushStack = false; Owner.DispatchEvent(ControllerCommand.SetActiveAction, action); } else { ActionMonsterDie action = new ActionMonsterDie(Owner); action.attacker = killer; action.IsPushStack = false; Owner.DispatchEvent(ControllerCommand.SetActiveAction, action); } //ActionBomb } else { ActionDie action = new ActionDie(Owner); action.IsPushStack = false; Owner.DispatchEvent(ControllerCommand.SetActiveAction, action); } }
//播放攻击动画 public void PlayFightAnimation(SceneEntity target, uint skillId, Vector3 position) { Owner.AnimCmp.ResetFightingState(); uint jobId = Owner.TabID; KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(skillId, jobId); KActiveSkill skillSetting = KConfigFileManager.GetInstance().GetActiveSkill(skillId, 1); AnimActionParam param = new AnimActionParam(); param.skillId = (ushort)skillId; if (null != target) { KingSoftCommonFunction.LootAt(Owner.gameObject, target.gameObject); param.targetId = target.property.Id; } param.position = position; param.target = target; if (null != Owner.property.activeAction) { Owner.property.activeAction.FinishImmediate(); } if (skillDisplay.SkillType.CompareTo("MOVINGAOE") == 0) { SkillMovingAOE(param, skillDisplay, false); } else if (skillDisplay.SkillType.CompareTo("ANIM") == 0) { SkillSelf(param, skillDisplay, false); } else if (skillDisplay.SkillType.CompareTo("RUSH") == 0) { SkillRush(param, skillDisplay, false); } else if (skillDisplay.SkillType.CompareTo("SHOT") == 0) { } }
public void OnSkill(ushort skillId) { AnimationComponent.OperaWalking = false; if (SkillLogic.GetInstance().RequestSkill(skillId)) { KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(skillId, (uint)SceneLogic.GetInstance().MainHero.Job); if (skillDisplay.Opera.CompareTo("NONE") == 0) { SceneLogic.GetInstance().MainHero.Action.SendSkill(skillId); } else if (skillDisplay.Opera.CompareTo("TARGET") == 0) { if (SceneLogic.GetInstance().MainHero.property.target != null && SceneLogic.GetInstance().MainHero.property.target.property.isCanAttack&& !SceneLogic.GetInstance().MainHero.property.target.property.isDeaded) { SceneLogic.GetInstance().MainHero.Action.MoveAndSkill(skillId, SceneLogic.GetInstance().MainHero.property.target); } } else if (skillDisplay.Opera.CompareTo("DIR_RAND") == 0) { EventRet ret = SceneLogic.GetInstance().MainHero.DispatchEvent(ControllerCommand.TryFinishAction); bool bRet = (bool)ret.GetReturn <AnimationComponent>(); if (!bRet) { return; } ActiveSkillData skillVO = SkillLogic.GetInstance().GetActiveSkillVOByID(skillId); KActiveSkill skill = KConfigFileManager.GetInstance().GetActiveSkill((uint)skillId, skillVO.Level); if (null == skill) { return; } float CastMinRange = ((float)skill.CastMinRange) / 100f; float CastRange = ((float)skill.CastRange) / 100f; Vector3 currMousePoint = KingSoftCommonFunction.ScreenMouseToGround(SceneLogic.GetInstance().MainHero.Position); currMousePoint = new Vector3(currMousePoint.x, SceneLogic.GetInstance().MainHero.Position.y, currMousePoint.z); Vector3 dir = currMousePoint - SceneLogic.GetInstance().MainHero.Position; dir = new Vector3(dir.x, 0, dir.z); float f = Vector3.Distance(Vector3.zero, dir); if (f < CastMinRange) { Vector3 dir2 = dir.normalized * CastMinRange; currMousePoint = SceneLogic.GetInstance().MainHero.Position + dir2; } else if (f > CastRange) { Vector3 dir2 = dir.normalized * CastRange; currMousePoint = SceneLogic.GetInstance().MainHero.Position + dir2; } Vector3 p = KingSoftCommonFunction.NearPosition(currMousePoint); Vector3 midPoint = SceneLogic.GetInstance().MainHero.Position + (p - SceneLogic.GetInstance().MainHero.Position) * 0.5f; if (KingSoftCommonFunction.IsPointCanWalk(midPoint)) { SceneLogic.GetInstance().MainHero.Action.SendSkill(skillId, p); } } else if (skillDisplay.Opera.CompareTo("TARGET_DIR") == 0) { EventRet ret = SceneLogic.GetInstance().MainHero.DispatchEvent(ControllerCommand.TryFinishAction); bool bRet = (bool)ret.GetReturn <AnimationComponent>(); if (!bRet) { return; } ActiveSkillData skillVO = SkillLogic.GetInstance().GetActiveSkillVOByID(skillId); KActiveSkill skill = KConfigFileManager.GetInstance().GetActiveSkill((uint)skillId, skillVO.Level); if (null == skill) { return; } float CastRange = 2f; Vector3 currMousePoint; if (SceneLogic.GetInstance().MainHero.property.target != null && SceneLogic.GetInstance().MainHero.property.target.property.isCanAttack&& !SceneLogic.GetInstance().MainHero.property.target.property.isDeaded) { currMousePoint = SceneLogic.GetInstance().MainHero.property.target.Position; } else { currMousePoint = KingSoftCommonFunction.ScreenMouseToGround(SceneLogic.GetInstance().MainHero.Position); } Vector3 dir = currMousePoint - SceneLogic.GetInstance().MainHero.Position; dir = new Vector3(dir.x, 0, dir.z); if (dir.x == 0 && dir.z == 0) { dir = new Vector3(0f, 1f, 0f); } float f = Vector3.Distance(Vector3.zero, dir); SceneLogic.GetInstance().MainHero.Forward = dir; Vector3 dir2 = dir.normalized * CastRange; currMousePoint = SceneLogic.GetInstance().MainHero.Position + dir2; Vector3 p = KingSoftCommonFunction.NearPosition(currMousePoint); SceneLogic.GetInstance().MainHero.Action.SendSkill(skillId, p); } } }
public override void DoUpdate() { int _listLen = SkillLogic.GetInstance().activeSkillList.Length; if (_listLen > skillList.Length) { skillList = new uint[_listLen - 1]; Array.Copy(SkillLogic.GetInstance().activeSkillList, 1, skillList, 0, _listLen - 1); } if (!Owner.property.CmdAutoAttack) { return; } if (Owner.ActiveAction.actionType == Action.ACTION_TYPE.FLY) { return; } if (Owner.ActiveAction.actionType == Action.ACTION_TYPE.ANIM) { if (Owner.ActiveAction is ActionMovingAOE) { ActionMovingAOE aoe = (ActionMovingAOE)Owner.ActiveAction; UpdateMoveAoe(aoe); return; } else { if (!Owner.ActiveAction.IsCanFinish()) { return; } } } else if (Owner.ActiveAction.actionType == Action.ACTION_TYPE.OPERA) { return; } if (!SelectAim()) { return; } int _len = skillList.Count(); if (_len > 0) { curIndex = curIndex % +_len; for (int i = 0; i < _len; i++) { uint skillId = skillList[curIndex]; try { if (!SkillLogic.GetInstance().RequestSkill((uint)skillId)) { curIndex = (curIndex + 1) % +_len; continue; } KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(skillId, Owner.property.tabID); if (!Owner.ActiveAction.TryFinish()) { continue; } if (skillDisplay.Opera.CompareTo("TARGET") == 0) { SceneLogic.GetInstance().MainHero.Action.MoveAndSkill((ushort)skillId, Owner.property.target); Owner.property.AutoAttack = false; return; } else if (skillDisplay.Opera.CompareTo("NONE") == 0) { SceneLogic.GetInstance().MainHero.Action.MoveAndSkill((ushort)skillId, Owner.property.target); return; } else if (skillDisplay.Opera.CompareTo("TARGET_DIR") == 0) { SceneLogic.GetInstance().MainHero.Action.MoveAndSkill((ushort)skillId, Owner.property.target); Owner.property.AutoAttack = false; return; } } catch (NullReferenceException e) { } } } OperaAttack action = new OperaAttack(Owner); action.IsPushStack = true; KActiveSkill skill = KConfigFileManager.GetInstance().GetActiveSkill((uint)Owner.Job, 1); if (null == skill) { return; } action.deltaSpace = ((float)skill.CastRange) / 100f; action.target = Owner.property.target; EventDispatcher.GameWorld.DispatchEvent(ControllerCommand.CHANGE_TARGET); Owner.ActiveAction = action; Owner.property.AutoAttack = false; }
//播放战斗效果 public void PlayFightEffect(ushort wSkillID, int damage, byte byAttackEvent, SceneEntity killerHero) { if (byAttackEvent == (byte)KAttackEvent.aeMiss) { if (Owner.property.isMainHero) { Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "2", "FightFont", "effect_ui_shuzitanchu_putong.res"); } else { Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "1", "FightFont", "effect_ui_shuzitanchu_putong.res"); } return; } else if (byAttackEvent == (byte)KAttackEvent.aeCrit) { Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "+" + damage, "CritFont", "effect_ui_shuzitanchu_baoji2.res"); } else if (Owner.property.isMainHero) { Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "+" + damage, "HurtFont", "effect_ui_shuzitanchu_putong.res", NumTip.OFFSET_TYPE.LEFT); } else { Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "+" + damage, "AttackFont", "effect_ui_shuzitanchu_putong.res"); } KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(wSkillID, Owner.TabID); if (skillDisplay.OnHitAction.CompareTo("JUMP") == 0) { ActionBeAttactedAndThrowUp action = new ActionBeAttactedAndThrowUp(Owner); action.hitAnim = skillDisplay.OnHitAnim; action.time = skillDisplay.OnHitEffecTime; action.height = skillDisplay.OnHitHeight; Owner.ActiveAction = action; //action } else if (Owner.property.heroObjType == KHeroObjectType.hotMonster && Owner.heroSetting.MonsterGrade == KMonsterGrade.mgQuestBoss) { if (Owner.property.activeAction.TryFinish()) { ActiionBeAttack beAttack = new ActiionBeAttack(Owner); Owner.DispatchEvent(ControllerCommand.SetActiveAction, beAttack); } } else { Owner.DispatchEvent(ControllerCommand.BE_HIT); } Vector3 forward = Vector3.forward; if (null != killerHero) { forward = killerHero.transform.position - Owner.transform.position; forward = new Vector3(forward.x, 0, forward.z); forward.Normalize(); } if (skillDisplay.HitShakeTime > 0 && skillDisplay.HitShakeDelta > 0) { Owner.DispatchEvent(ControllerCommand.HIT_SLOW, skillDisplay.HitShakeTime, skillDisplay.HitShakeDelta); } if (null != skillDisplay && skillDisplay.HitEffect.Length > 0 /*&& skillDisplay.BulletEffect.Length == 0*/) { AssetInfo inf = AssetLoader.GetInstance().Load(URLUtil.GetResourceLibPath() + skillDisplay.HitEffect); if (inf.isDone(false)) { if (skillDisplay.SingleHitFx) { GameObject _hit = null; if (hitFxs.TryGetValue(skillDisplay.HitEffect, out _hit)) { GameObject.Destroy(_hit); } } GameObject hitObject = inf.CloneGameObject(); ObjectUtil.SetTagWithAllChildren(hitObject, CameraLayerManager.GetInstance().GetMissionSignName()); hitObject.transform.parent = Owner.transform.parent; hitObject.transform.position = Owner.transform.position; hitObject.transform.forward = forward; if (skillDisplay.SingleHitFx) { hitFxs[skillDisplay.HitEffect] = hitObject; } KingSoftCommonFunction.SetLayer(hitObject, 11); DestoryObject dos = hitObject.AddComponent <DestoryObject>(); dos.delta = 5; if (skillDisplay.HitBindPoint.Length > 0) { if (skillDisplay.HitBindPoint.CompareTo("Ground") != 0) { Transform t = Owner.GetChildTransform(skillDisplay.HitBindPoint); if (null != t) { hitObject.transform.parent = t; hitObject.transform.localPosition = Vector3.zero; hitObject.transform.localScale = Vector3.one; } } } hitObject.SetActive(true); } } }
public override void InitParam(AnimActionParam param, KSkillDisplay skillDisplay) { isRandomAnim = false; base.InitParam(param, skillDisplay); }
public virtual void InitParam(AnimActionParam param, KSkillDisplay skillDisplay) { displayInfor = skillDisplay; WeaponPosition = displayInfor.WeaponPosition; skillId = param.skillId; targetId = param.targetId; level = param.level; target = param.target; endPosition = KingSoftCommonFunction.GetGoundHeight(KingSoftCommonFunction.NearPosition(param.position)); activeSkill = KConfigFileManager.GetInstance().GetActiveSkill(skillId, level); FirstAttackTime = 0; animArys = displayInfor.Anim.Split('|'); int [] ids = KingSoftCommonFunction.RandomAry(animArys.Length); beginFxs = displayInfor.BeginEffect.Split('|'); beginFxs = KingSoftCommonFunction.GrowArrays(beginFxs, animArys.Length); if (isRandomAnim) { animArys = KingSoftCommonFunction.RandomAryByList(animArys, ids); beginFxs = KingSoftCommonFunction.RandomAryByList(beginFxs, ids); } if (beginFxs[0].Length > 0) { AssetLoader.GetInstance().PreLoad(URLUtil.GetResourceLibPath() + beginFxs[0]); } if (displayInfor.EndEffect.Length > 0) { AssetLoader.GetInstance().PreLoad(URLUtil.GetResourceLibPath() + displayInfor.EndEffect); } if (displayInfor.BulletEffect.Length > 0) { AssetLoader.GetInstance().PreLoad(URLUtil.GetResourceLibPath() + displayInfor.BulletEffect); } try { string [] AttackTimes = activeSkill.AttackTimeList.Split(';'); if (displayInfor.CameraEffect.CompareTo("SHAKE_ALL") == 0) { foreach (string _t in AttackTimes) { try { shakeTimes.Add((float)System.Convert.ToDouble(_t)); } catch (System.Exception e) { } } if (shakeTimes.Count > 0) { FirstAttackTime = (float)shakeTimes[0]; } } else { if (AttackTimes.Length > 0) { try { FirstAttackTime = (float)System.Convert.ToDouble(AttackTimes[0]); } catch (System.Exception e) { } } } if (activeSkill.ClientCache) { KAminEvent _event = KConfigFileManager.GetInstance().GetAnimEvent(hero.property.tabID, animArys[0]); if (null == _event) { FirstAttackTime = hero.AnimCmp.GetAnimLong(animArys[0]) - 0.3f; } else { FirstAttackTime = _event.time; } } } catch (System.Exception e) { } hitTicker.SetCD(FirstAttackTime); finishTicker.SetCD(FirstAttackTime + displayInfor.hitDelay); }
public void OnHeroDeathOp(KProtoBuf buf, bool fristTime) { S2C_HERO_DEATH respond = buf as S2C_HERO_DEATH; SceneEntity targetHero = GetSceneObject(respond.heroID) as SceneEntity; SceneEntity killerHero = GetSceneObject(respond.KillerID) as SceneEntity; if (null == targetHero) { return; } if (targetHero == mainHero) { ReliveView.GetInstance().ShowView(); } targetHero.property.isDeaded = true; uint lastSkillId = targetHero.property.lastHitSkillId; KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(lastSkillId, targetHero.property.tabID); if (fristTime && null != killerHero) { KActiveSkill activeSkill = KConfigFileManager.GetInstance().GetActiveSkill(lastSkillId, 1); if (null != activeSkill && activeSkill.ClientCache) { if (null != killerHero.ActiveAction) { killerHero.ActiveAction.AddDeadMessage(respond); return; } } else if (null != killerHero && skillDisplay.HitDelayTimeScale > 0.00001f) { float distance = Vector3.Distance(killerHero.Position, targetHero.Position); float _time = distance * skillDisplay.HitDelayTimeScale; DelayCallManager.instance.CallFunction(OnHeroDeathParam, _time, buf, false); return; } } if (null != targetHero) { if (targetHero.property.activeAction.isFlying) { if (skillDisplay.DeadType != KSkillDisplay.DEAD_TYPE.PHYSICS) { targetHero.property.isDeadTemp = true; return; } } targetHero.DispatchEvent(ControllerCommand.FinishImmediate); targetHero.DispatchEvent(ControllerCommand.CLEAR_BUFF); targetHero.Action.ToDead(killerHero); targetHero.property.isDeadTemp = true; if (null != killerHero) { if (killerHero.gameObject.GetComponent <AttackSlow>() == null) { if (null == skillDisplay || skillDisplay.DieAttackSlowTime <= 0) { return; } killerHero.DispatchEvent( ControllerCommand.SLOW, killerHero.AnimCmp.GetLastLogicAnimName(), skillDisplay.DieAttackSlowTime, skillDisplay.DieAttackSpeed); } } } }