/// <summary> /// Play a sequence of actions! /// </summary> public void PlayAction(ref ActionRequestData action) { //the character needs to be alive in order to be able to play actions if (NetState.NetworkLifeState.Value == LifeState.Alive && !m_Movement.IsPerformingForcedMovement()) { if (action.CancelMovement) { m_Movement.CancelMove(); } m_ActionPlayer.PlayAction(ref action); } }
public override void Cancel() { if (m_Movement && !m_Movement.IsPerformingForcedMovement()) { m_Movement.CancelMove(); } }
/// <summary> /// We've crashed into a victim! This function determines what happens to them... and to us! /// It's possible for us to be stunned by our victim if they have a special power that allows that. /// This function checks for that special case; if we become stunned, the victim is entirely unharmed, /// and further collisions with other victims will also have no effect. /// </summary> /// <param name="victim">The character we've collided with</param> private void CollideWithVictim(ServerCharacter victim) { if (victim == m_Parent) { // can't collide with ourselves! return; } if (m_WasStunned) { // someone already stunned us, so no further damage can happen return; } // if we collide with allies, we don't want to hurt them (but we do knock them back, see below) if (m_Parent.IsNpc != victim.IsNpc) { // first see if this victim has the special ability to stun us! float chanceToStun = victim.GetBuffedValue(BuffableValue.ChanceToStunTramplers); if (chanceToStun > 0 && Random.Range(0, 1) < chanceToStun) { // we're stunned! No collision behavior for the victim. Stun ourselves and abort. m_WasStunned = true; m_Movement.CancelMove(); m_Parent.NetState.RecvCancelAllActionsClientRpc(); return; } // We deal a certain amount of damage to our "initial" target and a different amount to all other victims. int damage; if (m_Data.TargetIds != null && m_Data.TargetIds.Length > 0 && m_Data.TargetIds[0] == victim.NetworkObjectId) { damage = Description.Amount; } else { damage = Description.SplashDamage; } victim.NetState.RecvPerformHitReactionClientRPC(); victim.ReceiveHP(this.m_Parent, -damage); } var victimMovement = victim.GetComponent <ServerCharacterMovement>(); victimMovement.StartKnockback(m_Parent.transform.position, Description.KnockbackSpeed, Description.KnockbackDuration); }