public void BulletHit(Packet packet)
    {
        bulletMessage = (Message_BulletHit)((PacketSingle)packet).message;

        Debug.Log("handling bullet hit");

        if (bulletMessage.destUID != networkUID)
        {
            return;
        }


        RaycastHit hitInfo;
        Vector3    pos = VTMapManager.GlobalToWorldPoint(bulletMessage.pos);
        Vector3    vel = bulletMessage.dir.toVector3;
        Vector3    a   = pos;

        a += vel * 100.0f;

        bool   flag   = Physics.Linecast(pos, a, out hitInfo, 1025);
        Hitbox hitbox = null;

        if (flag)
        {
            hitbox = hitInfo.collider.GetComponent <Hitbox>();
            if ((bool)hitbox && (bool)hitbox.actor)
            {
                Debug.Log("found  target bullet hit");
                hitbox.Damage(bulletMessage.damage, hitInfo.point, Health.DamageTypes.Impact, hitbox.actor, "lol");
                BulletHitManager.instance.CreateBulletHit(hitInfo.point, -vel, true);
            }
        }
    }
    static bool Prefix(Bullet __instance)
    {
        Vector3 pos = Traverse.Create(__instance).Field("hitPoint").GetValue <Vector3>();
        Vector3 vel = Traverse.Create(__instance).Field("velocity").GetValue <Vector3>();
        Vector3 a   = pos;

        a += -vel * Time.deltaTime;
        float damage = Traverse.Create(__instance).Field("damage").GetValue <float>();

        Hitbox hitbox = null;



        RaycastHit[] hits;
        hits = Physics.RaycastAll(pos, vel, 100.0f, 1025);
        for (int i = 0; i < hits.Length; i++)
        {
            RaycastHit hit = hits[i];
            hitbox = hit.collider.GetComponent <Hitbox>();
            if ((bool)hitbox && (bool)hitbox.actor)
            {
                PlayerManager.lastBulletHit = hitbox;
                Debug.Log("hit box bullet hit");
                ulong lastID;
                if (VTOLVR_Multiplayer.AIDictionaries.reverseAllActors.TryGetValue(hitbox.actor, out lastID))
                {
                    Debug.Log("hit player sending bullet packet");
                    Message_BulletHit hitmsg = new Message_BulletHit(PlayerManager.localUID, lastID, VTMapManager.WorldToGlobalPoint(pos), new Vector3D(vel), damage);
                    NetworkSenderThread.Instance.SendPacketToSpecificPlayer(Networker.hostID, hitmsg, Steamworks.EP2PSend.k_EP2PSendReliable);
                }
            }
        }

        return(true);
    }
    public void BulletHit(Packet packet)
    {
        bulletMessage = (Message_BulletHit)((PacketSingle)packet).message;

        Debug.Log("handling bullet hit");

        if (bulletMessage.destUID != networkUID)
        {
            return;
        }
        Vector3 pos = VTMapManager.GlobalToWorldPoint(bulletMessage.pos);
        Vector3 vel = bulletMessage.dir.toVector3;

        RaycastHit[] hits;
        hits = Physics.RaycastAll(pos, vel, 100.0f, 1025);
        Hitbox hitbox = null;

        for (int i = 0; i < hits.Length; i++)
        {
            RaycastHit hit = hits[i];
            hitbox = hit.collider.GetComponent <Hitbox>();
            if ((bool)hitbox && (bool)hitbox.actor)
            {
                Debug.Log("found  target bullet hit");
                hitbox.Damage(bulletMessage.damage, hit.point, Health.DamageTypes.Impact, hitbox.actor, "Bullet Hit Network");
                BulletHitManager.instance.CreateBulletHit(hit.point, -vel, true);
            }
        }
    }
示例#4
0
    public void BulletHit(Packet packet)
    {
        bulletMessage = (Message_BulletHit)((PacketSingle)packet).message;

        Debug.Log("handling bullet hit");

        if (bulletMessage.destUID != networkUID)
        {
            return;
        }


        RaycastHit hitInfo;
        Vector3    pos = VTMapManager.GlobalToWorldPoint(bulletMessage.pos);
        Vector3    vel = bulletMessage.dir.toVector3;
        Vector3    a   = pos;

        a += vel * 100.0f;

        bool  flag   = Physics.Linecast(pos, a, out hitInfo, 1025);
        Actor source = null;

        if (AIDictionaries.allActors.ContainsKey(bulletMessage.sourceActorUID))
        {
            source = AIDictionaries.allActors[bulletMessage.sourceActorUID];
        }
        Hitbox hitbox = null;

        if (flag)
        {
            hitbox = hitInfo.collider.GetComponent <Hitbox>();
            if ((bool)hitbox && (bool)hitbox.actor)
            {
                Debug.Log("found  target bullet hit");
                hitbox.Damage(bulletMessage.damage * 3.0f, hitInfo.point, Health.DamageTypes.Impact, source, "Bullet Impact");
                BulletHitManager.instance.CreateBulletHit(hitInfo.point, -vel, true);
            }
        }
        else
        {
            health.Damage(bulletMessage.damage * 3.0f, ownerActor.gameObject.transform.position, Health.DamageTypes.Impact, source, "Bullet Impact");
            BulletHitManager.instance.CreateBulletHit(ownerActor.gameObject.transform.position, -vel, true);
        }
    }