#[ Thread to not flood this chat ]

1 messages · Page 1 of 1 (latest)

silk swan
#
public void ApplyDamage(IReceiveDamage hit, IBlock block = null, IParry parry = null)
{
    if (!_playerManager.IsOwner) return;

    _playerManager.InputReader.RequireNewPressForAll();

    if (block == null)
    {
        HitCancel = true;
        _playerManager.PlayerMovement.PushForward(-0.5f);
        _playerManager.PlayerAnimation.TriggerPause(ExtensionMethods.GetTimeFromFrames(0.5f));
        hit.ReceiveDamageServerRpc(CalculateDamage());
    }
    else
    {
        if (block.IsBlockingRpc()) // Attack Blocked | DEVOUR [ Add direction detection ]
        {
            // If hit is facing to player (half circle angle)
            _playerManager.PlayerMovement.PushForward(-4f);
            _playerManager.PlayerAnimation.TriggerPause(ExtensionMethods.GetTimeFromFrames(6f));
            hit.ReceiveDamageServerRpc(CalculateDamage());
        }
        else if (parry.IsParrying()) // Attack Parried
        {
            _playerManager.PlayerMovement.PushForward(-4f);
            // Change state to ParryStun
            parry.Parry();
        }
        else // Attack Went Through
        {
            HitCancel = true;
            _playerManager.PlayerMovement.PushForward(-2f);
            _playerManager.PlayerAnimation.TriggerPause(ExtensionMethods.GetTimeFromFrames(1f));
            hit.ReceiveDamageServerRpc(CalculateDamage());
        }
    }
}```
#
[Rpc(SendTo.Everyone, RequireOwnership = false)]
public void ReceiveDamageServerRpc(float damage)
{
    float hitStunTime = ExtensionMethods.GetTimeFromFrames(6f); // DEVOUR (Make the hitstun related to the enemy's attack)
    float knockback = 4f; // DEVOUR (Make this related to the attack received)

    if (IsBlockingRpc())
    {
        // Rotate to attacker
        _playerManager.PlayerMovement.PushForward(-knockback / 2);
        _playerManager.PlayerAnimation.TriggerPause(hitStunTime / 3);
        FloatingTextManager.Instance.CastFloatingTextRpc(transform.position, "Block", Color.blue);
    }
    else if (IsParrying())
    {

    }
    else
    {
        FloatingTextManager.Instance.CastFloatingTextRpc(transform.position, Mathf.Round(damage).ToString(), Color.red);

        HitstunTime = hitStunTime;
        _playerManager.PlayerMovement.PushForward(-knockback);

        _playerManager.PlayerAnimation.PlayAnimation(RandomHurtAnimation());
        _playerManager.StateMachine.ChangeState(CharacterState.Hurt);
    }
}```
#

these are my two functions right now, which I am more than willing to fix/change if needed

random shore
#

I'm assuming the _playerManager is the local player. Movement and animation should be fine gf these functions are on the player.
RPCs don't return any value so if(IsBlockingRpc()) is not going to work.

silk swan
#

yes, I changed that to a network variable rather

#

and player manager

#

is just like a... reference master
it doesn't really do much

#
using UnityEngine;
using Unity.Netcode;

public class PlayerManager : NetworkBehaviour
{
    public bool CurrentPlayer = false;

    public InputReader InputReader { get; private set; }
    public PlayerMovement PlayerMovement { get; private set; }
    public PlayerAnimation PlayerAnimation { get; private set; }
    public PlayerEquipment PlayerEquipment { get; private set; }
    public PlayerCombatManager PlayerCombatManager { get; private set; }
    public PlayerStateMachine StateMachine { get; private set; }

    // Temp Values
    [field: SerializeField] public float FallTime { get; private set; } = ExtensionMethods.GetTimeFromFrames(3f);

    void Start()
    {
        GetReferences();

        if (IsOwner)
        {
            CurrentPlayer = true;
            CameraControl.Instance.AssignFollowCameraTarget(transform);
            gameObject.layer = LayerMask.NameToLayer("Player");
            name = "Me";
        }
        else
        {
            name = "Other Player";
        }
    }

    void Update()
    {
        if (IsOwner)
            SetAnimatorFloat();
    }

    void SetAnimatorFloat()
    {
        var input = InputReader.CurrentMovementInput;
        Vector3 moveDirection = new Vector3(input.x, 0, input.y);
        Vector3 relativeInput = transform.InverseTransformDirection(moveDirection);
        PlayerAnimation.SetFloat(relativeInput.x, relativeInput.z);
    }

    void GetReferences()
    {
        InputReader = GetComponent<InputReader>();
        StateMachine = GetComponent<PlayerStateMachine>();
        PlayerMovement = GetComponent<PlayerMovement>();
        PlayerAnimation = GetComponent<PlayerAnimation>();
        PlayerEquipment = GetComponent<PlayerEquipment>();
        PlayerCombatManager = GetComponent<PlayerCombatManager>();

        StateMachine.ChangeState(CharacterState.Idle);
    }
}```
#

but like

#

what should be Rpc(SendTo.Everyone)

#

or ServerRpc

#

🤔

#

pvp damage and also enemies will deal damage