예제 #1
0
        public static void Respawn(BasePlayer player, bool newPos)
        {
            Player       p  = new Player(player);
            RespawnEvent re = new RespawnEvent(p);

            OnRespawn.OnNext(re);

            ++ServerPerformance.spawns;
            if (newPos)
            {
                BasePlayer.SpawnPoint spawnPoint = ServerMgr.FindSpawnPoint();
                player.transform.position = spawnPoint.pos;
                player.transform.rotation = spawnPoint.rot;
            }
            if (re.ChangePos && re.SpawnPos != Vector3.zero)
            {
                player.transform.position = re.SpawnPos;
            }
            player.supressSnapshots = true;
            player.StopSpectating();
            player.UpdateNetworkGroup();
            player.UpdatePlayerCollider(true, false);
            player.StartSleeping();
            player.metabolism.Reset();
            if (re.GiveDefault)
            {
                player.inventory.GiveDefaultItems();
            }

            player.SendFullSnapshot();
        }
예제 #2
0
 public void On_Respawn(RespawnEvent re)
 {
     if (re.Player.basePlayer == TestBot)
     {
         SetHookWorking("On_Respawn");
         re.GiveDefault = false;
     }
     Broadcast(re.Player.Name + " respawned on " + re.SpawnPos);
 }
예제 #3
0
 private void FireRsEvent()
 {
     if (!restartText.IsActive())
     {
         EventSystem.current.SetSelectedGameObject(null, null);
         btn.enabled = false;
         RespawnEvent?.Invoke();
     }
 }
예제 #4
0
 public void RpcKill()
 {
     if (photonView.IsMine)
     {
         AudioSource.PlayClipAtPoint(hitSound, transform.position);
         //id.owner.profile.deaths++;
         //id.owner.profile.CalculateKDR();
         RespawnEvent?.Invoke();
         PhotonNetwork.Destroy(gameObject);
     }
 }
예제 #5
0
    public IEnumerator DeathTransition()
    {
        DeathEvent?.Invoke();
        //  Debug.Log("Start");
        yield return(new WaitForSeconds(PlayerManager._instance.GetPlayerGFX.GetDeathAnimLength));

        // Debug.Log("Player Died");
        UIManager._instance.BlackPanel(true);

        yield return(new WaitForSeconds(extraDelay));

        UIManager._instance.BlackPanel(false);
        RespawnEvent?.Invoke();
        startedDeathEvent = false;
    }
예제 #6
0
        /*
         * // In future create an Event, allow people to adjust certain resources to give certain amounts!
         * public static void ResourceGatherMultiplier(int amount, BaseEntity receiver, ItemAmount itemAmt)
         * {
         *  int newAmt = amount;
         *  if (receiver.ToPlayer() != null)
         *      newAmt = (int)((double)amount * World.GetInstance().ResourceGatherMultiplier);
         *
         *  Item item = ItemManager.CreateByItemID(itemAmt.itemid, newAmt);
         *  receiver.GiveItem(item);
         * }*/

        public static void Respawn(BasePlayer player, bool newPos)
        {
            Player       p  = Server.GetPlayer(player);
            RespawnEvent re = new RespawnEvent(p);

            OnRespawn.OnNext(re);

            ++ServerPerformance.spawns;
            if (newPos)
            {
                BasePlayer.SpawnPoint spawnPoint = ServerMgr.FindSpawnPoint();
                player.transform.position = spawnPoint.pos;
                player.transform.rotation = spawnPoint.rot;
            }
            if (re.ChangePos && re.SpawnPos != Vector3.zero)
            {
                player.transform.position = re.SpawnPos;
            }
            player.SetPlayerFlag(BasePlayer.PlayerFlags.Wounded, false);
            player.SetPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot, true);
            player.SetFieldValue("lastTickTime", 0f);
            player.CancelInvoke("DieFromWounds");
            player.StopSpectating();
            player.UpdateNetworkGroup();
            player.UpdatePlayerCollider(true, false);
            player.StartSleeping();
            player.Invoke("LifeStoryStart", 0f);
            player.metabolism.Reset();

            if (re.StartHealth < Single.Epsilon)
            {
                player.InitializeHealth(player.StartHealth(), player.StartMaxHealth());
            }
            else
            {
                player.InitializeHealth(re.StartHealth, player.StartMaxHealth());
            }

            if (re.GiveDefault)
            {
                player.inventory.GiveDefaultItems();
            }

            if (re.WakeUp)
            {
                player.EndSleeping();
            }
        }
예제 #7
0
        public static void On_Respawn(BasePlayer player, Vector3 pos, Quaternion quat)
        {
            Player       p  = Server.GetPlayer(player);
            RespawnEvent re = new RespawnEvent(p, pos, quat);

            OnNext("On_Respawn", re);

            ++ServerPerformance.spawns;
            player.SetFieldValue("lastPositionValue", pos);
            player.transform.position = re.SpawnPos;
            player.transform.rotation = re.SpawnRot;
            player.SetPlayerFlag(BasePlayer.PlayerFlags.Wounded, false);
            player.SetPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot, true);
            player.SetFieldValue("lastTickTime", 0f);
            player.CancelInvoke("WoundingEnd");
            player.StopSpectating();
            player.UpdateNetworkGroup();
            player.UpdatePlayerCollider(true, false);
            player.StartSleeping();
            player.Invoke("LifeStoryStart", 0f);
            player.metabolism.Reset();

            if (re.StartHealth < Single.Epsilon)
            {
                player.InitializeHealth(player.StartHealth(), player.StartMaxHealth());
            }
            else
            {
                player.InitializeHealth(re.StartHealth, player.StartMaxHealth());
            }

            if (re.GiveDefault)
            {
                player.inventory.GiveDefaultItems();
            }

            if (re.WakeUp)
            {
                player.EndSleeping();
            }
            player.SendNetworkUpdateImmediate(false);
            player.ClientRPCPlayer(null, player, "StartLoading");
            player.SendFullSnapshot();
            player.SetPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot, false);
            player.ClientRPCPlayer(null, player, "FinishLoading");
        }
예제 #8
0
        private void PlayerUpdate(Player player, int i)
        {
            TSPlayer ply = new TSPlayer(i);

            if (ply.UUID == "")
            {
                return;
            }

            if (player.dead && !prevDeadState[i])
            { // Died
                DeathEvent.Invoke(ply);
            }
            if (!player.dead && prevDeadState[i])
            { // Respawned
                RespawnEvent.Invoke(ply);
            }

            prevDeadState[i] = player.dead;
        }
예제 #9
0
 private void Respawn(RespawnEvent args)
 {
     args.SendPacket(new ClientStatusPacket {
         ActionID = (sbyte)ClientStatus.Respawn
     });
 }
예제 #10
0
파일: Hooks.cs 프로젝트: Notulp/Pluton.Rust
        /// <summary>
        /// Called from <c>BasePlayer.RespawnAt(Vector3, Quaternion)</c> .
        /// </summary>
        public static void On_PlayerRespawn(BasePlayer basePlayer, Vector3 pos, Quaternion quat)
        {
            Player player = Server.GetPlayer(basePlayer);
            var re = new RespawnEvent(player, pos, quat);

            OnNext("On_PlayerRespawn", re);

            basePlayer.SetPlayerFlag(BasePlayer.PlayerFlags.Wounded, false);
            basePlayer.SetPlayerFlag(BasePlayer.PlayerFlags.HasBuildingPrivilege, false);
            basePlayer.SetPlayerFlag(BasePlayer.PlayerFlags.InBuildingPrivilege, false);
            basePlayer.SetPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot, true);
            ++ServerPerformance.spawns;
            basePlayer.transform.position = re.SpawnPos;
            basePlayer.transform.rotation = re.SpawnRot;
            (basePlayer.GetFieldValue("tickInterpolator") as TickInterpolator).Reset(pos);
            basePlayer.SetFieldValue("lastTickTime", 0f);
            basePlayer.CancelInvoke("WoundingEnd");
            basePlayer.StopSpectating();
            basePlayer.UpdateNetworkGroup();
            basePlayer.UpdatePlayerCollider(true, false);
            basePlayer.StartSleeping();
            basePlayer.Invoke("LifeStoryStart", 0f);
            basePlayer.metabolism.Reset();

            if (re.StartHealth < Single.Epsilon)
            {
                basePlayer.InitializeHealth(basePlayer.StartHealth(), basePlayer.StartMaxHealth());
            }
            else
            {
                basePlayer.InitializeHealth(re.StartHealth, basePlayer.StartMaxHealth());
            }

            if (re.GiveDefault)
            {
                basePlayer.inventory.GiveDefaultItems();
            }

            if (re.WakeUp)
            {
                basePlayer.EndSleeping();
            }

            basePlayer.SendNetworkUpdateImmediate(false);
            basePlayer.ClearEntityQueue();
            basePlayer.ClientRPCPlayer(null, basePlayer, "StartLoading");

            if (basePlayer.IsConnected())
                basePlayer.SendFullSnapshot();

            // player.SetPlayerFlag (BasePlayer.PlayerFlags.ReceivingSnapshot, false);
            // player.ClientRPCPlayer(null, player, "FinishLoading");
        }
예제 #11
0
 public void OnRespawn(RespawnEvent re)
 {
     this.Invoke("On_Respawn", re);
 }
예제 #12
0
 public void OnRespawn(RespawnEvent ev)
 => DiscordLab.bot.NewMessage(ev.IsCI ? "**Attention all personnel: Chaos insurgency breach in progress**" : "**Mobile Task Force unit Epsilon 11 has entered the facility!**");