public void Tick(IResultControl control, float dt) { if (IsNeedRemove) { return; } if (m_isPeriodNeed) { int count = (int)((Time.time - m_periodStartTime) / m_period); m_periodStartTime += m_period * count; m_periodWorkCount += count; } foreach (IBuffEffect e in m_effects) { if (IsNeedRemove) { e.OnRemoved(control); } if (e.IsNeedTick) { e.Tick(control, dt); } for (int i = 0; i < m_periodWorkCount; ++i) { e.Exec(control); } } m_periodWorkCount = 0; }
public override void Exec(IResultControl control) { Actor targetActor = ActorManager.Singleton.Lookup(TargetID); m_curCD.m_cdTime = m_cdTime; targetActor.CDControl.CDListAdd(m_curCD); }
public void ExecAllServerResult(IResultControl control) { foreach (IResult result in m_results) { result.ResultServerExec(control); } }
public void Tick(float dt, IResultControl control) { //此处用for是因为方便buff的tick中添加buff,但删除buff只能在所有buff的tick之后 bool isCalcProperty = false; for (int i = 0; i < BuffList.Count; ++i) { BuffList[i].IsRemoveBuff(dt, control); BuffList[i].Tick(control, dt); if (BuffList[i].IsNeedRemove && BuffList[i].IsCalcProperty) { isCalcProperty = true; } } int removedBuffCount = BuffList.RemoveAll(Temp_Remove_Buff); if (isCalcProperty || removedBuffCount > 0) { if (isCalcProperty) { BuffResult(); } else { RefreshBuffGraphics(); } } }
public void RemoveAll(IResultControl control) { foreach (var buff in BuffList) { buff.MarkRemove(control); } }
public override void OnProduceResult(IResult result, IResultControl control) { base.OnProduceResult(result, control); if (result.ClassID == (int)ENResult.Damage) { ResultDamage damage = result as ResultDamage; BuffInfo info = GameTable.BuffTableAsset.Lookup(BuffID); foreach (var item in info.BuffResultList) { if (item.ID == (int)ClassID) { if (item.ParamList[1] < UnityEngine.Random.Range(0.0f, 1.0f)) {//几率吸血 continue; } float value = item.ParamList[0] * damage.DamageValue; IResult r = BattleFactory.Singleton.CreateResult(ENResult.Health, SourceID, TargetID, 0, 0, new float[5] { (float)ResultHealth.HealthType.enFixed, value, 0, 0, 0 }); if (r != null) { r.ResultExpr(new float[5] { (float)ResultHealth.HealthType.enFixed, value, 0, 0, 0 }); BattleFactory.Singleton.DispatchResult(r); } } } } }
public override void OnGetResult(IResult result, IResultControl control) { base.OnGetResult(result, control); if (result.ClassID == (int)ENResult.Damage) { ResultDamage r = result as ResultDamage; BuffInfo info = GameTable.BuffTableAsset.Lookup(BuffID); foreach (var item in info.BuffResultList) { if (item.ID == (int)ClassID) { switch ((ENDecreaseDamageType)item.ParamList[0]) { case ENDecreaseDamageType.enPercent: { if (item.ParamList[4] == 0 || (int)item.ParamList[4] == (int)r.DamageResultType) { r.DamageValue *= m_decreasePercent; m_decreasePercent *= item.ParamList[3]; if (m_decreasePercent < item.ParamList[2]) { //最小值 m_decreasePercent = item.ParamList[2]; } } } break; } } } } }
public override void ResultServerExec(IResultControl control) { if (mRefreshResult) { Actor targetActor = ActorManager.Singleton.Lookup(SourceID); if (targetActor == null) { return; } // 全部技能 if (mSkillID == 0) { foreach (var tmpCD in targetActor.CDControl.CDList) { tmpCD.Remove(); } } // 某个技能 else { foreach (var tmpCD in targetActor.CDControl.CDList) { if (mSkillID == tmpCD.GetCDSkillID()) { tmpCD.Remove(); break; } } } } }
public override void OnProduceResult(IResult result, IResultControl control) { base.OnProduceResult(result, control); if (result.ClassID == (int)ENResult.Damage) { ResultDamage rd = result as ResultDamage; BuffInfo info = GameTable.BuffTableAsset.Lookup(BuffID); foreach (var item in info.BuffResultList) { if (item.ID == (int)ClassID) { switch ((ENType)item.ParamList[0]) { case ENType.enRacialType: { Actor target = ActorManager.Singleton.Lookup(rd.TargetID); if (target != null) { if (target.OnGetRaceType() == (int)item.ParamList[1]) { rd.DamageValue *= (1 + item.ParamList[2]); } } } break; } } } } }
public override void Exec(IResultControl control) { base.Exec(control); Actor self = ActorManager.Singleton.Lookup(SourceID); if (self == null) { Debug.LogWarning("actor is not exist, id is " + SourceID); return; } for (int i = 0; i < m_actorCount; ++i) { int actorID = ActorManager.Singleton.GetValidActorID(2000 + i); Actor actor = ActorManager.Singleton.CreatePureActor(m_actorType, actorID, CSItemGuid.Zero, m_actorID); actor.Props.SetProperty_Int32(ENProperty.islive, 1); if (actor.Type == ActorType.enNPC) { NPC npc = actor as NPC; npc.CurRoom = (self as NPC).CurRoom; npc.roomElement = new RoomElement(); npc.IsActive = true; } //else //{ // Player p = actor as Player; // p.InitPartnerSkill(); //} actor.CreateNeedModels(); Vector3 pos = GetValidPosition(actor.MainPos, m_range); actor.ForceMoveToPosition(pos); actor.StartDeadCD(m_duration); } }
public override void ResultServerExec(IResultControl control) { base.ResultServerExec(control); Actor target = ActorManager.Singleton.Lookup(TargetID); if (null == target) { return; } target.Props.SetProperty_Int32(ENProperty.Exp, m_curtExp); target.Props.SetProperty_Int32(ENProperty.LevelUpPoint, m_levelUpPoint); if (m_isLevelUp) { target.Props.SetProperty_Int32(ENProperty.level, m_level); } MainPlayer mainPlayer = ActorManager.Singleton.MainActor; if (mainPlayer.ID == TargetID) { mainPlayer.UpDataSkillLevelUp(); if (m_isLevelUp) { //播放升级特效 mainPlayer.UpdataMainHeadLevel(); } } //是否需要显示获得经验数字 }
public override void OnProduceResult(IResult result, IResultControl control) { base.OnProduceResult(result, control); if (result.ClassID == (int)ENResult.Health) { ResultHealth r = result as ResultHealth; BuffInfo info = GameTable.BuffTableAsset.Lookup(BuffID); foreach (var item in info.BuffResultList) { if (item.ID == (int)ClassID) { switch ((ENType)item.ParamList[0]) { case ENType.enProduceRestore: { if ((int)item.ParamList[4] == (int)r.HealthResultType) { //改变某类型的恢复 float percent = item.ParamList[1]; if (percent != 0) { r.HealthValue *= percent; } } } break; } } } } }
public override void Exec(IResultControl control) { base.Exec(control); Actor actor = ActorManager.Singleton.Lookup(TargetID); if (null == actor) { return; } if (actor.Type == ActorType.enNPCTrap) {//机关 ControlTrap tmpActor = actor as ControlTrap; tmpActor.OperateOpenAnim(); ActorManager.Singleton.Lookup(SourceID).TargetManager.CurrentTarget = null; } else if (actor.Type == ActorType.enNPC) { NPC npc = actor as NPC; if (npc.GetNpcType() == ENNpcType.enBoxNPC) {//宝箱 IResult r = BattleFactory.Singleton.CreateResult(ENResult.Dead, SourceID, TargetID); if (r != null) { r.ResultExpr(null); BattleFactory.Singleton.GetBattleContext().CreateResultControl().DispatchResult(r); } } } }
public void ExecAllResult(IResultControl control) { foreach (IResult result in m_results) { result.Exec(control); } }
public override void Exec(IResultControl control) { if (mRefreshResult) { Actor targetActor = ActorManager.Singleton.Lookup(SourceID); if (targetActor == null) { return; } switch (m_type) { case RefreshSkillType.enAllSkill: foreach (var tmpCD in targetActor.CDControl.CDList) { tmpCD.Remove(); } break; case RefreshSkillType.enSkill: foreach (var tmpCD in targetActor.CDControl.CDList) { if (mSkillID == tmpCD.GetCDSkillID()) { tmpCD.Remove(); break; } } break; default: break; } } }
public override void OnGetResult(IResult result, IResultControl control) { base.OnGetResult(result, control); if (result.ClassID == (int)ENResult.StaminaChanged) {//强韧度改变的目标是自己,所以在OnGetResult BuffInfo info = GameTable.BuffTableAsset.Lookup(BuffID); Actor actor = ActorManager.Singleton.Lookup(TargetID); if (actor.Type != ActorType.enNPC) { Debug.LogWarning("StaminaChanged OnGetResult failed! actor is not npc! actor type=" + actor.Type.ToString()); return; } foreach (var item in info.BuffResultList) { //破韧 if (item.ID == (int)ClassID) { //第一个参数为添加buff的id IResult r = BattleFactory.Singleton.CreateResult(ENResult.AddBuff, TargetID, TargetID, 0, 0, new float[1] { item.ParamList[0] }); if (r != null) { r.ResultExpr(new float[1] { item.ParamList[0] }); BattleFactory.Singleton.DispatchResult(r); } } } } }
public Boolean ShowResult(IResult result) { this.ClearResult(); if (result == null) { return(false); } Object obj = result.Result; if (obj == null) { return(false); } foreach (Control c in this.Controls) { IResultControl rc = c as IResultControl; if (rc != null) { if (rc.ShowResult(result) == true) { c.Visible = true; return(true); } } } return(false); }
public override void ResultServerExec(IResultControl control) { base.ResultServerExec(control); Actor actor = ActorManager.Singleton.Lookup(TargetID); if (null == actor) { return; } if (actor.Type == ActorType.enMain) { MainPlayer player = actor as MainPlayer; //通知头像 player.NotifyChanged((int)Actor.ENPropertyChanged.enMainHead, EnMainHeadType.enActorRelive); } if (actor.Type == ActorType.enMain || actor.Type == ActorType.enPlayer) { //主控角色或其他玩家 if (!actor.IsActorExit) { //战斗中 actor.ForceMoveToPosition(SM.RandomRoomLevel.Singleton.m_sceneCampReliveNode[actor.Camp]); } } if (actor.Type == ActorType.enMain && !actor.IsActorExit) { MainGame.Singleton.MainCamera.MoveAtOnce(actor); } //设置头顶血条 ActorAction action = actor.ActionControl.AddAction(ActorAction.ENType.enReliveAction); if (action == null) {//添加复活action失败,则删除所有的action,再添加复活action actor.ActionControl.RemoveAll(); actor.ActionControl.AddAction(ActorAction.ENType.enReliveAction); } }
public override void OnRemoved(IResultControl control) { base.OnRemoved(control); Actor self = ActorManager.Singleton.Lookup(TargetID); if (self == null) { Debug.LogWarning("actor is null, id is " + TargetID); return; } BuffInfo info = GameTable.BuffTableAsset.Lookup(BuffID); if (info == null) { Debug.LogWarning("buff is null, id is " + BuffID); return; } foreach (var item in info.BuffResultList) { if (item.ID == (int)ClassID) { self.SelfTeleport.Remove((Teleport.ENTeleportType)item.ParamList[0]); return; } } }
public override void OnRemoved(IResultControl control) { base.OnRemoved(control); Actor actor = ActorManager.Singleton.Lookup(TargetID); if (null == actor) { Debug.LogWarning("OnGetBuffEffect failed! actor is not exist! actor id=" + TargetID.ToString()); return; } BuffInfo info = GameTable.BuffTableAsset.Lookup(BuffID); if (info == null) { Debug.LogWarning("OnGetBuffEffect failed! buff is not exist! buff id=" + BuffID.ToString()); return; } if (actor.Type == ActorType.enNPC) {//此buff效果只对npc生效 foreach (var item in info.BuffResultList) { if (item.ID == (int)ClassID) { switch ((ENFearType)item.ParamList[0]) { case ENFearType.enEscape: { //更改ai actor.SelfAI = m_selfAI; } break; } } } } }
public override void Exec(IResultControl control) { base.Exec(control); Actor actorTarget = ActorManager.Singleton.Lookup(TargetID); //Actor actorSrc = ActorManager.Singleton.Lookup(SourceID); int hpTarget = actorTarget.Props.GetProperty_Int32(ENProperty.hp); if (!m_isHit) { m_hp = 0; } if (m_isCrit) { m_hp = 2 * m_hp; } hpTarget = hpTarget - m_hp; if (0 >= hpTarget) { hpTarget = 0; } if (0 == hpTarget) { SResultDead deadResult = (SResultDead)control.GetContext().CreateResult((int)ENResult.Dead); deadResult.SourceID = this.SourceID; deadResult.TargetID = this.TargetID; control.DispatchResult(deadResult); } if (95 >= UnityEngine.Random.Range(0, 100)) { m_isFly = true; } }
//根据服务器发回的数据进行结算 public override void ResultServerExec(IResultControl control) { SkillResultInfo info = GameTable.SkillResultTableAsset.Lookup(SkillResultID); if (null == info) { return; } Actor target = ActorManager.Singleton.Lookup(TargetID); Actor source = ActorManager.Singleton.Lookup(SourceID); if (null == target || source == null) { return; } //没有命中 if (!m_isHit) { return; } // 如果产生combo if (info.ComboNum > 0) { //m_damageModify = GetComboSkillDamageModify(SkillResultID); source.OnComboChanged(SkillResultID, TargetID, m_damageModify); } //目标强韧 { target.OnStaminaEvent(source, out m_isFly); } if (m_isBreak || m_isFly) { target.BeHited(source, m_isBack, m_isFly, info.AnimGauge); } else if (m_isFakeBreak) { target.FakeBeHited(source); } if (info.IsPlayEffect) { target.PlayEffect(info.EffectName, info.EffectDuration, info.EffectPos, info.IsAheadBone, Vector3.zero); } if (info.IsChangeShader) { AnimationShaderParamCallback callback = target.GetBodyParentObject().GetComponent <AnimationShaderParamCallback>(); callback.ChangeShader(info.ChangeShaderAnimName); } //战斗意志 source.OnAddWill(WillToFight.ENAddWillType.enSkillResult, new float[2] { info.SFightWillGet, info.NFightWillGet }); // 设置爆破点 target.SetBlastPos(source.RealPos, source.GetBodyObject().transform.forward); }
public virtual IResultControl CreateResultControl() { if (null == m_resultControl) { m_resultControl = new IResultControl(); m_resultControl.SetContext(this); } return(m_resultControl); }
public override void OnGetResult(IResult result, IResultControl control) { base.OnGetResult(result, control); if (result.ClassID == (int)ENResult.Damage) { //删除自身 RemoveSelf(); } }
public override void OnProduceResult(IResult result, IResultControl control) { base.OnProduceResult(result, control); if (result.ClassID == (int)ENResult.Skill) { //释放技能时, 取消潜行 StopSneak(); } }
// 服务器发送回 resultTree public void OnMsgSyncResultTree_S2C(PacketReader p, object state) { int dataSize = p.ReadInt32(); IResultControl resultControl = BattleFactory.Singleton.GetBattleContext().CreateResultControl(); resultControl.GetResultTree().Deserialize(p); resultControl.GetResultTree().ExecAllServerResult(resultControl); resultControl.GetResultTree().ReleaseAllResult(); }
public void RemoveAllForDead(IResultControl control) { foreach (var buff in BuffList) { if (buff.IsNeedRemoveForDead) { buff.MarkRemove(control); } } }
public void OnGetResult(IResult result, IResultControl control) { foreach (IBuffEffect e in m_effects) { if (e.IsNeedResultPass) { e.OnGetResult(result, control); } } }
public void RemoveBuff(int buffID, IResultControl control) { Buff buff = BuffList.Find(item => item.BuffID == buffID); if (null == buff) { return; } buff.MarkRemove(control); }
public override void Exec(IResultControl control) { int value = (int)DamageValue; if (value <= 0) { return; } Actor target = ActorManager.Singleton.Lookup(TargetID); if (null == target) { return; } Actor source = ActorManager.Singleton.Lookup(SourceID); float curHP = target.ReduceHp(value); float multiple = 0; if (m_attackValue != 0) { multiple = value / m_attackValue; } target.OnHpChanged(value, m_isCrit, multiple, false); if (curHP <= 0) {//dead if (source != null) { source.TargetManager.ClearTarget(); } {//result-dead IResult r = BattleFactory.Singleton.CreateResult(ENResult.Dead, SourceID, target.ID); if (r != null) { r.ResultExpr(null); BattleFactory.Singleton.GetBattleContext().CreateResultControl().DispatchResult(r); } } } {//伤害来源 target.Damgaed(source); } {//战斗意志 target.OnAddWill(WillToFight.ENAddWillType.enBeAttacked, new float[1] { value }); } if (target.Type == ActorType.enNPC) {//npc记录被伤害数据 (target as NPC).DamagedRecord(source.ID, value); } if (target.Type == ActorType.enFollow) {//同伴记录被伤害 数据 target.DamagedRecord(source.ID, value); } }