示例#1
0
        bool InNoLootZone(BasePlayer victim, BasePlayer attacker)
        {
            // Event Manager plugin support - http://oxidemod.org/plugins/event-manager.740/
            if (EventManager)
            {
                if (!((bool)EventManager.Call("isPlaying", victim)))
                {
                    return(false);
                }
                PrintToChat(attacker, Lang("NoLootZone", attacker.UserIDString));
                return(true);
            }

            // Zone Manager plugin support - http://oxidemod.org/plugins/zones-manager.739/
            if (ZoneManager)
            {
                var noLooting = Enum.Parse(ZoneManager.GetType().GetNestedType("ZoneFlags"), "NoPlayerLoot", true);
                if (!((bool)ZoneManager.Call("HasPlayerFlag", victim, noLooting)))
                {
                    return(false);
                }
                PrintToChat(attacker, Lang("NoLootZone", attacker.UserIDString));
                return(true);
            }

            return(false);
        }
示例#2
0
        void TransferMoney(BasePlayer victim, BasePlayer attacker)
        {
            // Check if player is in event/zone with no looting
            var inEvent = EventManager?.Call("isPlaying", victim);

            if (inEvent != null && (bool)inEvent)
            {
                return;
            }
            if (ZoneManager != null)
            {
                var noLooting = Enum.Parse(ZoneManager.GetType().GetNestedType("ZoneFlags"), "noplayerloot", true);
                if ((bool)ZoneManager.CallHook("HasPlayerFlag", victim, noLooting))
                {
                    return;
                }
            }

            // Calculate and transfer money
            var wallet = (double)Economics.Call("GetPlayerMoney", victim.userID);
            var amount = victim.IsSleeping() ? Math.Floor(wallet * (PercentSleeping / 100)) : Math.Floor(wallet * (PercentAwake / 100));

            if (amount > 0)
            {
                Economics.Call("Transfer", victim.userID, attacker.userID, amount);
                PrintToChat(attacker, MoneyStolen.Replace("{amount}", amount.ToString()).Replace("{player}", victim.displayName));
                return;
            }
            PrintToChat(attacker, NothingStolen.Replace("{player}", victim.displayName));
        }
示例#3
0
        void Transfer(BasePlayer victim, BasePlayer attacker)
        {
            // Check if player is in event with no looting
            var inEvent = EventManager?.Call("isPlaying", victim);

            if (inEvent != null && (bool)inEvent)
            {
                return;
            }

            // Check if player is in zone with no looting
            if (ZoneManager)
            {
                var noLooting = Enum.Parse(ZoneManager.GetType().GetNestedType("ZoneFlags"), "noplayerloot", true);
                if ((bool)ZoneManager.CallHook("HasPlayerFlag", victim, noLooting))
                {
                    return;
                }
            }

            // Economics plugin support
            var money = 0d;

            if (Economics && economics)
            {
                // Check if victim's balance is greater than 0
                var balance = (double)Economics.Call("GetPlayerMoney", victim.userID);

                // Calculate amount based on victim's balance
                money = victim.IsSleeping() ? Math.Floor(balance * (percentSleeping / 100)) : Math.Floor(balance * (percentAwake / 100));

                if (money > 0)
                {
                    // Transfer money from victim to attacker
                    Economics.Call("Transfer", victim.userID, attacker.userID, money);
                }
            }

            // ServerRewards plugin support
            var points = 0d;

            if (ServerRewards && rewards)
            {
                // Check if victim's balance is greater than 0
                var balance = (int)ServerRewards.Call("CheckPoints", victim.userID);

                // Calculate amount based on victim's balance
                points = victim.IsSleeping() ? Math.Floor(balance * (percentSleeping / 100)) : Math.Floor(balance * (percentAwake / 100));

                if (points > 0)
                {
                    // Transfer points from victim to attacker
                    ServerRewards.Call("TakePoints", victim.userID, points);
                    ServerRewards.Call("AddPoints", attacker.userID, points);
                }
            }

            // Notify attacker
            if (money > 0)
            {
                PrintToChat(attacker, Lang("StoleMoney", attacker.UserIDString, money, victim.displayName));
            }
            if (points > 0)
            {
                PrintToChat(attacker, Lang("StolePoints", attacker.UserIDString, points, victim.displayName));
            }
            if (money <= 0 && points <= 0)
            {
                PrintToChat(attacker, Lang("StoleNothing", attacker.UserIDString, victim.displayName));
            }
        }