private void UseOther(BaseEntity.RPCMessage msg)
    {
        BasePlayer basePlayer = msg.player;

        if (!this.VerifyClientAttack(basePlayer))
        {
            base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
            return;
        }
        if (!basePlayer.CanInteract())
        {
            return;
        }
        if (!base.HasItemAmount() || !this.canUseOnOther)
        {
            return;
        }
        BasePlayer basePlayer1 = BaseNetworkable.serverEntities.Find(msg.read.UInt32()) as BasePlayer;

        if (basePlayer1 != null && Vector3.Distance(basePlayer1.transform.position, basePlayer.transform.position) < 4f)
        {
            base.ClientRPCPlayer(null, basePlayer, "Reset");
            this.GiveEffectsTo(basePlayer1);
            base.UseItemAmount(1);
            base.StartAttackCooldown(this.repeatDelay);
        }
    }
Beispiel #2
0
    private void RPC_OpenLoot(BaseEntity.RPCMessage rpc)
    {
        if (this.inventory == null)
        {
            return;
        }
        BasePlayer basePlayer = rpc.player;

        if (!basePlayer || !basePlayer.CanInteract())
        {
            return;
        }
        if (Interface.CallHook("CanLootEntity", basePlayer, this) != null)
        {
            return;
        }
        if (basePlayer.inventory.loot.StartLootingEntity(this, true))
        {
            base.SetFlag(BaseEntity.Flags.Open, true, false, true);
            basePlayer.inventory.loot.AddContainer(this.inventory);
            basePlayer.inventory.loot.SendImmediate();
            basePlayer.ClientRPCPlayer <string>(null, basePlayer, "RPC_OpenLootPanel", this.lootPanelName);
            base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        }
    }
Beispiel #3
0
    private bool CanFire(BasePlayer player)
    {
        if (RequiresPumping && pressure < PressureLossPerTick)
        {
            return(false);
        }
        if (player == null)
        {
            return(false);
        }
        if (HasFlag(Flags.Open))
        {
            return(false);
        }
        if (AmountHeld() <= 0)
        {
            return(false);
        }
        if (!player.CanInteract())
        {
            return(false);
        }
        if (!player.CanAttack() || player.IsRunning())
        {
            return(false);
        }
        Item item = GetItem();

        if (item == null || item.contents == null)
        {
            return(false);
        }
        return(true);
    }
    private void UseOther(BaseEntity.RPCMessage msg)
    {
        BasePlayer player1 = msg.player;

        if (!this.VerifyClientAttack(player1))
        {
            this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        }
        else
        {
            if (!player1.CanInteract() || !this.HasItemAmount() || !this.canUseOnOther)
            {
                return;
            }
            BasePlayer player2 = BaseNetworkable.serverEntities.Find(msg.read.UInt32()) as BasePlayer;
            if (!Object.op_Inequality((Object)player2, (Object)null) || (double)Vector3.Distance(((Component)player2).get_transform().get_position(), ((Component)player1).get_transform().get_position()) >= 4.0)
            {
                return;
            }
            this.ClientRPCPlayer((Connection)null, player1, "Reset");
            this.GiveEffectsTo(player2);
            this.UseItemAmount(1);
            this.StartAttackCooldown(this.repeatDelay);
        }
    }
    public override void ServerUse()
    {
        if (base.isClient)
        {
            return;
        }
        BasePlayer ownerPlayer = base.GetOwnerPlayer();

        if (ownerPlayer == null)
        {
            return;
        }
        if (!ownerPlayer.CanInteract())
        {
            return;
        }
        if (!base.HasItemAmount())
        {
            return;
        }
        this.GiveEffectsTo(ownerPlayer);
        base.UseItemAmount(1);
        base.StartAttackCooldown(this.repeatDelay);
        base.SignalBroadcast(BaseEntity.Signal.Attack, string.Empty, null);
    }
    private void RPC_LootCorpse(BaseEntity.RPCMessage rpc)
    {
        BasePlayer basePlayer = rpc.player;

        if (!basePlayer || !basePlayer.CanInteract())
        {
            return;
        }
        if (!this.CanLoot())
        {
            return;
        }
        if (this.containers == null)
        {
            return;
        }
        if (Interface.CallHook("CanLootEntity", basePlayer, this) != null)
        {
            return;
        }
        if (basePlayer.inventory.loot.StartLootingEntity(this, true))
        {
            base.SetFlag(BaseEntity.Flags.Open, true, false, true);
            ItemContainer[] itemContainerArray = this.containers;
            for (int i = 0; i < (int)itemContainerArray.Length; i++)
            {
                ItemContainer itemContainer = itemContainerArray[i];
                basePlayer.inventory.loot.AddContainer(itemContainer);
            }
            basePlayer.inventory.loot.SendImmediate();
            base.ClientRPCPlayer(null, basePlayer, "RPC_ClientLootCorpse");
            base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        }
    }
Beispiel #7
0
 private void Lock(BasePlayer player)
 {
     if (!(player == null) && player.CanInteract() && !IsLocked() && Interface.CallHook("CanLock", player, this) == null && HasLockPermission(player))
     {
         LockLock(player);
         SendNetworkUpdate();
     }
 }
    private void StartLootingContainer(BaseEntity.RPCMessage msg)
    {
        BasePlayer player = msg.player;

        if (!Object.op_Implicit((Object)player) || !player.CanInteract() || (!this.lootable || Interface.CallHook("CanLootEntity", (object)player, (object)this) != null) || !player.inventory.loot.StartLootingEntity(this.baseEntity, true))
        {
            return;
        }
        this.lastAccessTime = Time.get_realtimeSinceStartup();
        player.inventory.loot.AddContainer(this.container);
    }
 private void RPC_OpenLoot(RPCMessage rpc)
 {
     if (inventory != null)
     {
         BasePlayer player = rpc.player;
         if ((bool)player && player.CanInteract())
         {
             PlayerOpenLoot(player, lootPanelName);
         }
     }
 }
Beispiel #10
0
 public override void ServerUse()
 {
     if (!base.isClient)
     {
         BasePlayer ownerPlayer = GetOwnerPlayer();
         if (!(ownerPlayer == null) && ownerPlayer.CanInteract() && HasItemAmount())
         {
             GiveEffectsTo(ownerPlayer);
             UseItemAmount(1);
             StartAttackCooldown(repeatDelay);
             SignalBroadcast(Signal.Attack, string.Empty);
         }
     }
 }
Beispiel #11
0
 private void RPC_OpenLoot(RPCMessage rpc)
 {
     if (inventory != null)
     {
         BasePlayer player = rpc.player;
         if ((bool)player && player.CanInteract() && CanOpenStorage(player) && (!needsBuildingPrivilegeToUse || player.CanBuild()) && Interface.CallHook("CanLootEntity", player, this) == null && player.inventory.loot.StartLootingEntity(this))
         {
             player.inventory.loot.AddContainer(inventory);
             player.inventory.loot.SendImmediate();
             player.ClientRPCPlayer(null, player, "RPC_OpenLootPanel", lootPanelName);
             SendNetworkUpdate();
         }
     }
 }
Beispiel #12
0
 private void RPC_OpenLoot(RPCMessage rpc)
 {
     if (inventory != null)
     {
         BasePlayer player = rpc.player;
         if ((bool)player && player.CanInteract() && Interface.CallHook("CanLootEntity", player, this) == null && player.inventory.loot.StartLootingEntity(this))
         {
             SetFlag(Flags.Open, true);
             player.inventory.loot.AddContainer(inventory);
             player.inventory.loot.SendImmediate();
             player.ClientRPCPlayer(null, player, "RPC_OpenLootPanel", lootPanelName);
             SendNetworkUpdate();
         }
     }
 }
Beispiel #13
0
    private void UseSelf(RPCMessage msg)
    {
        BasePlayer player = msg.player;

        if (!VerifyClientAttack(player))
        {
            SendNetworkUpdate();
        }
        else if (player.CanInteract() && HasItemAmount())
        {
            ClientRPCPlayer(null, player, "Reset");
            GiveEffectsTo(player);
            UseItemAmount(1);
            StartAttackCooldown(repeatDelay);
        }
    }
Beispiel #14
0
        private bool CanDowngrade(BuildingBlock buildingBlock, BasePlayer player, BuildingGrade.Enum targetGrade, bool refund, bool isAdmin)
        {
            if (player == null || !player.CanInteract())
            {
                return(false);
            }

            var constructionGrade = buildingBlock.GetGrade(targetGrade);

            if (constructionGrade == null)
            {
                return(false);
            }

            if (!isAdmin)
            {
                if (buildingBlock.SecondsSinceAttacked < 30f)
                {
                    return(false);
                }
                var obj = Interface.CallHook("CanChangeGrade", player, buildingBlock, targetGrade);
                if (obj is bool)
                {
                    return((bool)obj);
                }
                if (player.IsBuildingBlocked(buildingBlock.transform.position, buildingBlock.transform.rotation, buildingBlock.bounds))
                {
                    return(false);
                }
                var isUpgradeBlocked = isUpgradeBlockedMethod?.Invoke(buildingBlock, null);
                if (isUpgradeBlocked is bool && (bool)isUpgradeBlocked)
                {
                    return(false);
                }
                if (!HasAccess(player, buildingBlock))
                {
                    return(false);
                }
                if (Interface.CallHook("OnStructureUpgrade", buildingBlock, player, targetGrade) != null)
                {
                    return(false);
                }
            }

            return(true);
        }
Beispiel #15
0
        private bool CanUpgrade(BuildingBlock buildingBlock, BasePlayer player, BuildingGrade.Enum targetGrade, bool pay, bool isAdmin)
        {
            if (player == null || !player.CanInteract())
            {
                return(false);
            }
            var constructionGrade = buildingBlock.GetGrade(targetGrade);

            if (constructionGrade == null)
            {
                return(false);
            }
            if (!isAdmin)
            {
                if (buildingBlock.SecondsSinceAttacked < 30f)
                {
                    return(false);
                }
                if (!buildingBlock.CanChangeToGrade(targetGrade, player))
                {
                    return(false);
                }

                if (!HasAccess(player, buildingBlock))
                {
                    return(false);
                }
                if (Interface.Oxide.CallHook("OnStructureUpgrade", buildingBlock, player, targetGrade) != null)
                {
                    return(false);
                }
            }
            if (pay)
            {
                //if (!buildingBlock.CanAffordUpgrade(targetGrade, player)) {
                //    return false;
                //}
                //buildingBlock.PayForUpgrade(constructionGrade, player);
                if (!CanAffordUpgrade(buildingBlock, constructionGrade, player, targetGrade))
                {
                    return(false);
                }
                PayForUpgrade(buildingBlock, constructionGrade, player);
            }
            return(true);
        }
    public override void ServerUse()
    {
        if (this.isClient)
        {
            return;
        }
        BasePlayer ownerPlayer = this.GetOwnerPlayer();

        if (Object.op_Equality((Object)ownerPlayer, (Object)null) || !ownerPlayer.CanInteract() || !this.HasItemAmount())
        {
            return;
        }
        this.GiveEffectsTo(ownerPlayer);
        this.UseItemAmount(1);
        this.StartAttackCooldown(this.repeatDelay);
        this.SignalBroadcast(BaseEntity.Signal.Attack, string.Empty, (Connection)null);
    }
    private void RPC_LootCorpse(BaseEntity.RPCMessage rpc)
    {
        BasePlayer player = rpc.player;

        if (!Object.op_Implicit((Object)player) || !player.CanInteract() || (!this.CanLoot() || this.containers == null) || (Interface.CallHook("CanLootEntity", (object)player, (object)this) != null || !player.inventory.loot.StartLootingEntity((BaseEntity)this, true)))
        {
            return;
        }
        this.SetFlag(BaseEntity.Flags.Open, true, false, true);
        foreach (ItemContainer container in this.containers)
        {
            player.inventory.loot.AddContainer(container);
        }
        player.inventory.loot.SendImmediate();
        this.ClientRPCPlayer((Connection)null, player, "RPC_ClientLootCorpse");
        this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
Beispiel #18
0
    private void RPC_LootCorpse(RPCMessage rpc)
    {
        BasePlayer player = rpc.player;

        if ((bool)player && player.CanInteract() && CanLoot() && containers != null && Interface.CallHook("CanLootEntity", player, this) == null && player.inventory.loot.StartLootingEntity(this))
        {
            SetFlag(Flags.Open, true);
            ItemContainer[] array = containers;
            foreach (ItemContainer container in array)
            {
                player.inventory.loot.AddContainer(container);
            }
            player.inventory.loot.SendImmediate();
            ClientRPCPlayer(null, player, "RPC_ClientLootCorpse");
            SendNetworkUpdate();
        }
    }
    private void RPC_OpenLoot(BaseEntity.RPCMessage rpc)
    {
        if (this.inventory == null)
        {
            return;
        }
        BasePlayer player = rpc.player;

        if (!Object.op_Implicit((Object)player) || !player.CanInteract() || (Interface.CallHook("CanLootEntity", (object)player, (object)this) != null || !player.inventory.loot.StartLootingEntity((BaseEntity)this, true)))
        {
            return;
        }
        this.SetFlag(BaseEntity.Flags.Open, true, false, true);
        player.inventory.loot.AddContainer(this.inventory);
        player.inventory.loot.SendImmediate();
        player.ClientRPCPlayer <string>((Connection)null, player, "RPC_OpenLootPanel", this.lootPanelName);
        this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
    }
    private void UseSelf(BaseEntity.RPCMessage msg)
    {
        BasePlayer player = msg.player;

        if (!this.VerifyClientAttack(player))
        {
            this.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
        }
        else
        {
            if (!player.CanInteract() || !this.HasItemAmount())
            {
                return;
            }
            this.ClientRPCPlayer((Connection)null, player, "Reset");
            this.GiveEffectsTo(player);
            this.UseItemAmount(1);
            this.StartAttackCooldown(this.repeatDelay);
        }
    }
Beispiel #21
0
    private void UseOther(RPCMessage msg)
    {
        BasePlayer player = msg.player;

        if (!VerifyClientAttack(player))
        {
            SendNetworkUpdate();
        }
        else if (player.CanInteract() && HasItemAmount() && canUseOnOther)
        {
            BasePlayer basePlayer = BaseNetworkable.serverEntities.Find(msg.read.UInt32()) as BasePlayer;
            if (basePlayer != null && Vector3.Distance(basePlayer.transform.position, player.transform.position) < 4f)
            {
                ClientRPCPlayer(null, player, "Reset");
                GiveEffectsTo(basePlayer);
                UseItemAmount(1);
                StartAttackCooldown(repeatDelay);
            }
        }
    }
    private void UseSelf(BaseEntity.RPCMessage msg)
    {
        BasePlayer basePlayer = msg.player;

        if (!this.VerifyClientAttack(basePlayer))
        {
            base.SendNetworkUpdate(BasePlayer.NetworkQueue.Update);
            return;
        }
        if (!basePlayer.CanInteract())
        {
            return;
        }
        if (!base.HasItemAmount())
        {
            return;
        }
        base.ClientRPCPlayer(null, basePlayer, "Reset");
        this.GiveEffectsTo(basePlayer);
        base.UseItemAmount(1);
        base.StartAttackCooldown(this.repeatDelay);
    }
Beispiel #23
0
    private void StartLootingContainer(BaseEntity.RPCMessage msg)
    {
        BasePlayer basePlayer = msg.player;

        if (!basePlayer || !basePlayer.CanInteract())
        {
            return;
        }
        if (!this.lootable)
        {
            return;
        }
        if (Interface.CallHook("CanLootEntity", basePlayer, this) != null)
        {
            return;
        }
        if (basePlayer.inventory.loot.StartLootingEntity(base.baseEntity, true))
        {
            this.lastAccessTime = UnityEngine.Time.realtimeSinceStartup;
            basePlayer.inventory.loot.AddContainer(this.container);
        }
    }