示例#1
0
        public List <string> getFriendList(string player)
        {
            object   friends_obj = null;
            DateTime lastFriendCheckPlayer;

            if (lastFriendCheck.TryGetValue(player, out lastFriendCheckPlayer))
            {
                if ((DateTime.Now - lastFriendCheckPlayer).TotalMinutes <= cacheTimer)
                {
                    return(friendCache[player]);
                }
                else
                {
                    friends_obj             = Friends?.CallHook("IsFriendOfS", player);
                    lastFriendCheck[player] = DateTime.Now;
                }
            }
            else
            {
                friends_obj = Friends?.CallHook("IsFriendOfS", player);
                if (lastFriendCheck.ContainsKey(player))
                {
                    lastFriendCheck.Remove(player);
                }

                if (friendCache.ContainsKey(player))
                {
                    friendCache.Remove(player);
                }

                lastFriendCheck.Add(player, DateTime.Now);
            }

            var players = new List <string>();

            if (friends_obj == null)
            {
                return(players);
            }

            string[] friends = friends_obj as string[];

            foreach (string fid in friends)
            {
                players.Add(fid);
            }

            if (friendCache.ContainsKey(player))
            {
                friendCache[player] = players;
            }
            else
            {
                friendCache.Add(player, players);
            }

            return(players);
        }
示例#2
0
 void Unload()
 {
     if (useZoneManager)
     {
         foreach (var zone in zones)
         {
             ZoneManager.CallHook("EraseZone", zone.Value.zoneid);
         }
     }
 }
 void cmdPm(BasePlayer player, string command, string[] args)
 {
     if (args.Length > 1)
     {
         var name = args[0];
         var p    = FindPlayer(name);
         if (p == player)
         {
             PrintMessage(player, "SelfPM");
             return;
         }
         if (p != null)
         {
             if (!(bool)(Interface.Oxide.CallHook("CanChat", player) ?? true))
             {
                 SendReply(player, "You are not allowed to chat here");
                 return;
             }
             var hasIgnore = Ignore?.CallHook("HasIgnored", p.userID, player.userID);
             if (hasIgnore != null && (bool)hasIgnore)
             {
                 PrintMessage(player, "IgnoreYou", p.displayName);
                 return;
             }
             hasIgnore = BetterChat?.CallHook("API_PlayerIgnores", p.UserIDString, player.UserIDString);
             if (hasIgnore != null && (bool)hasIgnore)
             {
                 PrintMessage(player, "IgnoreYou", p.displayName);
                 return;
             }
             var msg = string.Empty;
             for (var i = 1; i < args.Length; i++)
             {
                 msg = $"{msg} {args[i]}";
             }
             pmHistory[player.userID] = p.userID;
             pmHistory[p.userID]      = player.userID;
             PrintMessage(player, "PMTo", p.displayName, msg);
             PrintMessage(p, "PMFrom", player.displayName, msg);
             Effect.server.Run("assets/prefabs/locks/keypad/effects/lock.code.updated.prefab", p, 0, Vector3.zero, Vector3.zero);
             Puts("[PM]{0}->{1}:{2}", player.displayName, p.displayName, msg);
         }
         else
         {
             PrintMessage(player, "PlayerNotOnline", name);
         }
     }
     else
     {
         PrintMessage(player, "SyntaxPM");
     }
 }
示例#4
0
 private void PlayerCommand(BasePlayer player, string command, string[] args)
 {
     if (ConnectionDB)
     {
         if (Convert.ToBoolean(ConnectionDB.CallHook("ConnectionDataExists", player)))
         {
             DateTime init_date = Convert.ToDateTime(ConnectionDB.CallHook("FirstSeen", player));
             int      seconds   = Convert.ToInt32(ConnectionDB.CallHook("SecondsPlayed", player));
             TimeSpan ts        = TimeSpan.FromSeconds(seconds);
             PrintToChat(player, "<color=#66ff66>" + player.displayName + "</color> (<color=#ffccff>" + Convert.ToString(ConnectionDB.CallHook("FirstName", player)) + "</color>):\nYou have played <color=yellow>" + Math.Round(ts.TotalMinutes).ToString() + "</color> minutes since <color=yellow>" + init_date.ToShortDateString() + "</color>!\nTotal Seconds: <color=yellow>" + seconds.ToString() + "</color> | Connections: <color=yellow>" + Convert.ToString(ConnectionDB.CallHook("Connections", player)) + "</color>.");
         }
     }
 }
示例#5
0
 void cmdPm(BasePlayer player, string command, string[] args)
 {
     if (args.Length > 1)
     {
         var name = args[0];
         var p    = FindPlayer(name);
         if (p == player)
         {
             PrintMessage(player, "SelfPM");
             return;
         }
         if (p != null)
         {
             if (!(bool)(Interface.Oxide.CallHook("CanChat", player) ?? true))
             {
                 SendReply(player, "You are not allowed to chat here");
                 return;
             }
             var hasIgnore = Ignore?.CallHook("HasIgnored", p.userID, player.userID);
             if (hasIgnore != null && (bool)hasIgnore)
             {
                 PrintMessage(player, "IgnoreYou", p.displayName);
                 return;
             }
             if (RustyChat != null && ((double)RustyChat.Call("IsMutePlayer", player.userID)) > 0)
             {
                 SendReply(player, "Ваш чат заблокирован!");
                 return;
             }
             var msg = string.Empty;
             for (var i = 1; i < args.Length; i++)
             {
                 msg = $"{msg} {args[i]}";
             }
             pmHistory[player.userID] = p.userID;
             pmHistory[p.userID]      = player.userID;
             PrintMessage(player, "PMTo", p.displayName, msg);
             PrintMessage(p, "PMFrom", player.displayName, msg);
             Puts("[PM]{0}->{1}:{2}", player.displayName, p.displayName, msg);
         }
         else
         {
             PrintMessage(player, "PlayerNotOnline", name);
         }
     }
     else
     {
         PrintMessage(player, "SyntaxPM");
     }
 }
示例#6
0
 private bool CheckPlayerMoney(BasePlayer player, int amount)
 {
     if (useEconomics)
     {
         double money = (double)Economics?.CallHook("GetPlayerMoney", player.userID);
         if (money >= amount)
         {
             money = money - amount;
             Economics?.CallHook("Set", player.userID, money);
             return(true);
         }
         return(false);
     }
     return(false);
 }
示例#7
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));
        }
 bool IsFriend(ulong friendid, ulong playerid)
 {
     if (UseFriendsAPI && Friends != null)
     {
         var fr = Friends.CallHook("AreFriends", friendid, playerid);
         if (fr != null && (bool)fr)
         {
             return(true);
         }
     }
     if (UseTeams)
     {
         BasePlayer player = BasePlayer.FindByID(playerid);
         if (player.currentTeam != (long)0)
         {
             RelationshipManager.PlayerTeam playerTeam = RelationshipManager.Instance.FindTeam(player.currentTeam);
             if (playerTeam == null)
             {
                 return(false);
             }
             if (playerTeam.members.Contains(friendid))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
示例#9
0
        private void NotifyDiscord(Configuration.Limit limit, BaseNetworkable entity, BasePlayer player)
        {
            var discord = limit.Webhook;

            if (string.IsNullOrEmpty(discord.Webhook) || DiscordMessages == null || !DiscordMessages.IsLoaded)
            {
                return;
            }

            object fields = new[]
            {
                new
                {
                    name  = discord.PlayerTitle,
                    value = discord.Player.Replace("{name}", player?.displayName ?? "Unknown")
                            .Replace("{id}", player?.UserIDString ?? "0"),
                    inline = discord.Inline
                },
                new
                {
                    name  = discord.EntityTitle,
                    value = discord.Entity.Replace("{shortname}", entity.ShortPrefabName)
                            .Replace("{id}", entity.net.ID.ToString()).Replace("{type}", limit.Name),
                    inline = discord.Inline
                },
                new
                {
                    name   = discord.PositionTitle,
                    value  = discord.Position.Replace("{position}", FormattedCoordinates(entity.transform.position)),
                    inline = discord.Inline
                }
            };

            DiscordMessages.CallHook("API_SendFancyMessage", discord.Webhook, discord.Title, discord.Color, JsonConvert.SerializeObject(fields));
        }
示例#10
0
        private object OnAttackInternal(BasePlayer attacker, BasePlayer victim, HitInfo hit)
        {
            if (configData.FriendlyFire || attacker == victim || FriendlyFireEnabled(attacker.userID))
            {
                return(null);
            }
            var victimId   = victim.userID;
            var attackerId = attacker.userID;
            var hasFriend  = (bool)(Friends?.CallHook("HasFriend", attackerId, victimId) ?? false);

            if (!hasFriend)
            {
                hasFriend = (bool)(Clans?.CallHook("HasFriend", attacker.UserIDString, victim.UserIDString) ?? false);
                if (!hasFriend)
                {
                    return(null);
                }
            }
            var now = Facepunch.Math.Epoch.Current;
            int time;
            var key = $"{attackerId}-{victimId}";

            if (!times.TryGetValue(key, out time) || time < now)
            {
                PrintToChat(attacker, _("CannotHurt", attacker, victim.displayName));
                times[key] = now + 10;
            }
            hit.damageTypes  = new DamageTypeList();
            hit.DidHit       = false;
            hit.HitEntity    = null;
            hit.Initiator    = null;
            hit.DoHitEffects = false;
            hit.HitMaterial  = 0;
            return(false);
        }
示例#11
0
        private string getDeathMessage(string deathType, string listKey, object tags)
        {
            List <string> messageList;
            string        message = null;

            if (messages.ContainsKey(deathType))
            {
                if (messages[deathType].ContainsKey(listKey))
                {
                    if (disabledMessages.Contains($"{deathType}.{listKey}"))
                    {
                        return(null);
                    }
                    messageList = messages[deathType][listKey];
                }
                else
                {
                    if (disabledMessages.Contains($"{deathType}.Default"))
                    {
                        return(null);
                    }
                    messageList = messages[deathType]["Default"];
                }
                message = messageList[random.Next(messageList.Count)].ToString();
            }
            if (message == null)
            {
                return(message);
            }
            return(Death.CallHook("GetDeathString", message, tags).ToString());;
        }
示例#12
0
        private void GiveCredit(BasePlayer player, string type, float amount, string gathered)
        {
            if (amount > 0)
            {
                if (config.Settings.UseEconomics && Economics)
                {
                    Economics.CallHook("Deposit", player.UserIDString, amount);
                }
                if (config.Settings.UseServerRewards && ServerRewards)
                {
                    ServerRewards?.Call("AddPoints", new object[] { player.userID, amount });
                }
                if (type == "gather" && config.Settings.ShowMessagesOnGather)
                {
                    PrintToChat(player, config.Settings.PluginPrefix + " " + string.Format(Lang("ReceivedForGather", player), amount, gathered.ToLower()));
                }
                else if (type == "kill" && config.Settings.ShowMessagesOnKill)
                {
                    PrintToChat(player, config.Settings.PluginPrefix + " " + string.Format(Lang("ReceivedForKill", player), amount, gathered.ToLower()));
                }
            }
            else
            {
                amountstring = amount.ToString().Replace("-", "");
                amount       = float.Parse(amountstring);

                if (config.Settings.UseEconomics && Economics)
                {
                    Economics.CallHook("Withdraw", player.UserIDString, amount);
                }
                if (config.Settings.UseServerRewards && ServerRewards)
                {
                    ServerRewards?.Call("TakePoints", new object[] { player.userID, amount });
                }

                if (type == "gather" && config.Settings.ShowMessagesOnGather)
                {
                    PrintToChat(player, config.Settings.PluginPrefix + " " + string.Format(Lang("LostForGather", player), amount, gathered.ToLower()));
                }
                else if (type == "kill" && config.Settings.ShowMessagesOnKill)
                {
                    PrintToChat(player, config.Settings.PluginPrefix + " " + string.Format(Lang("LostForKill", player), amount, gathered.ToLower()));
                }
            }
        }
示例#13
0
 private bool AreFriends(string playerId, string friendId)
 {
     try {
         bool result = (bool)Friends?.CallHook("AreFriends", playerId, friendId);
         return(result);
     } catch {
         return(false);
     }
 }
示例#14
0
        private void ProcessConfiguration(BasePlayer player, string type)
        {
            var entityName = type.Contains("cupboard") ? "Tool Cupboard" : (type.Contains("lock") ? "Code Lock" : "Turret");

            if (Configuration.SendToDiscord && DiscordMessages)
            {
                object fields = new[]
                {
                    new
                    {
                        name = "Player", value = $"{player.displayName} ({player.UserIDString})", inline = true
                    },
                    new
                    {
                        name = "Coordinates", value = $"teleportpos {FormattedCoordinates(player)}", inline = true
                    },
                    new
                    {
                        name = "Violation Type", value = $"{entityName}", inline = true
                    }
                };

                DiscordMessages?.Call("API_SendFancyMessage", Configuration.DiscordWebhook,
                                      Configuration.DiscordEmbedTitle, Configuration.DiscordEmbedColor,
                                      JsonConvert.SerializeObject(fields));
            }

            if (Configuration.SendToSlack && Slack)
            {
                Slack.CallHook("Message", Lang("slackMessage")
                               .Replace("{player}", player.displayName)
                               .Replace("{steamID}", player.UserIDString)
                               .Replace("{type}", entityName)
                               .Replace("{coordinates}", FormattedCoordinates(player)));
            }

            if (Configuration.SendToStaff)
            {
                foreach (var target in BasePlayer.activePlayerList.Where(x => x.IsAdmin || HasPermission(x, "grouplimits.notify")))
                {
                    PrintToChat(target, Lang("staffMessage")
                                .Replace("{player}", player.displayName)
                                .Replace("{steamID}", player.UserIDString)
                                .Replace("{type}", entityName)
                                .Replace("{coordinates}", FormattedCoordinates(player)));
                }
            }

            if (!Configuration.WarnPlayers)
            {
                return;
            }

            PrintToChat(player, Lang("playerMessage").Replace("{limit}", Configuration.MaxPlayers.ToString()));
        }
示例#15
0
        void OnServerInitialized()
        {
            defaultClanCol = Config["defaultClanCol"];
            before         = Config["BeforeTag"];
            after          = Config["AfterTag"];
            perClanColor   = JsonConvert.DeserializeObject <Dictionary <string, string> >(JsonConvert.SerializeObject(Config["PerClanColor"]));
            permission.RegisterPermission("clantags.admin", this);
            permission.RegisterPermission("clantags.default", this);

            BetterChat?.CallHook("API_RegisterThirdPartyTitle", this, new Func <IPlayer, string>(GetClanTagFormatted));
        }
示例#16
0
 bool IsFriend(ulong playerid, ulong friend)
 {
     if (UseFriendsAPI && Friends != null)
     {
         var fr = Friends.CallHook("AreFriends", playerid, friend);
         if (fr != null && (bool)fr)
         {
             return(true);
         }
     }
     return(false);
 }
示例#17
0
        private string RunPlaceholders(IPlayer player, string message)
        {
            if (PlaceholderAPI == null || !PlaceholderAPI.IsLoaded)
            {
                return(message);
            }

            var builder = new StringBuilder(message);

            PlaceholderAPI.CallHook("ProcessPlaceholders", player, builder);
            return(builder.ToString());
        }
示例#18
0
 private bool CheckActiveFriends(ulong id)
 {
     foreach (var pair in playerConnections.PlayerInfo)
     {
         if ((bool)Friends?.CallHook("AreFriends", pair.Key, id))
         {
             if (UnixTimeStampUTC() - playerConnections.PlayerInfo[pair.Key].LastTime < inactiveAfter)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
示例#19
0
        private object OnAttackInternal(BasePlayer attacker, BasePlayer victim, HitInfo hit)
        {
            if (attacker == victim)
            {
                return(null);
            }

            float amount = hit.damageTypes.Get(hit.damageTypes.GetMajorityDamageType());
            float scale  = attackerAmount / 100;

            if (!adminPunish)
            {
                var victimId   = victim.userID;
                var attackerId = attacker.userID;
                var hasFriend  = (bool)(Friends?.CallHook("HasFriend", attackerId, victimId) ?? false);

                if (hasFriend)
                {
                    attacker.Hurt(amount * scale);
                    if (debug)
                    {
                        Puts(amount.ToString());
                    }
                    if (debug)
                    {
                        Puts(scale.ToString());
                    }
                    return(true);
                }
            }
            else
            {
                if (!permission.UserHasPermission(victim.UserIDString, adminPerm))
                {
                    return(null);
                }

                attacker.Hurt(amount * scale);
                if (debug)
                {
                    Puts(amount.ToString());
                }
                if (debug)
                {
                    Puts(scale.ToString());
                }
                return(true);
            }
            return(null);
        }
示例#20
0
 // playerid = active player, ownerid = owner of camera, who may be offline
 bool IsFriend(ulong playerid, ulong ownerid)
 {
     if (configData.useFriends && Friends != null)
     {
         var fr = Friends?.CallHook("AreFriends", playerid, ownerid);
         if (fr != null && (bool)fr)
         {
             return(true);
         }
     }
     if (configData.useClans && Clans != null)
     {
         string playerclan = (string)Clans?.CallHook("GetClanOf", playerid);
         string ownerclan  = (string)Clans?.CallHook("GetClanOf", ownerid);
         if (playerclan == ownerclan && playerclan != null && ownerclan != null)
         {
             return(true);
         }
     }
     if (configData.useTeams)
     {
         BasePlayer player = BasePlayer.FindByID(playerid);
         if (player.currentTeam != (long)0)
         {
             RelationshipManager.PlayerTeam playerTeam = RelationshipManager.ServerInstance.FindTeam(player.currentTeam);
             if (playerTeam == null)
             {
                 return(false);
             }
             if (playerTeam.members.Contains(ownerid))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
示例#21
0
        private bool IsIgnored(IPlayer sender, IPlayer target)
        {
            if (configData.UseIgnore)
            {
                var hasIgnore = Ignore?.CallHook("HasIgnored", target.Id, sender.Id);

                if (hasIgnore != null && (bool)hasIgnore)
                {
                    sender.Reply(Lang("IgnoreYou", sender.Id, target.Name));
                    return(true);
                }
            }

            return(false);
        }
示例#22
0
        public void TeleportLand(BasePlayer player, int id)
        {
            if (GetLand(id) == null)
            {
                Send(player, GetMessage("WrongID")); return;
            }
            Vector3 landPosition = (Vector3)ZoneManager.CallHook("GetZoneLocation", GetLand(id).zoneID.ToString());

            if (landPosition == null)
            {
                Send(player, GetMessage("ErrorTP")); return;
            }

            player.transform.position = landPosition;
            Send(player, GetMessage("TP"), id);
        }
示例#23
0
        /// <summary>
        /// Display a game tip to the given player
        /// </summary>
        /// <param name="player"></param>
        /// <param name="tip"></param>
        private void ShowGameTip(BasePlayer player, string tip)
        {
            if (player == null)
            {
                return;
            }

            if (GameTipAPI)
            {
                GameTipAPI.CallHook("ShowGameTip", player, tip, 5f);
            }
            else
            {
                player.SendConsoleCommand("gametip.hidegametip");
                player.SendConsoleCommand("gametip.showgametip", tip);
                timer.Once(5f, () => player?.SendConsoleCommand("gametip.hidegametip"));
            }
        }
示例#24
0
 object OnTrapTrigger(BaseTrap trap, GameObject obj)
 {
     if (trap is Landmine)
     {
         BasePlayer target = obj.GetComponent <BasePlayer>();
         if (target)
         {
             if (target.userID == trap.OwnerID)
             {
                 return(false);
             }
             else if (Convert.ToBoolean(Friends?.CallHook("AreFriends", target.userID, trap.OwnerID)))
             {
                 return(false);
             }
         }
     }
     return(null);
 }
        private void ProcessConfiguration(BasePlayer player, string type)
        {
            var entityName = type.Contains("cupboard") ? "Tool Cupboard" : (type.Contains("lock") ? "Code Lock" : "Turret");

            if (Configuration.SendToDiscord && Discord)
            {
                Discord.CallHook("Send Message", Lang("discordMessage")
                                 .Replace("{player}", player.displayName)
                                 .Replace("{steamID}", player.UserIDString)
                                 .Replace("{type}", entityName)
                                 .Replace("{coordinates}", FormattedCoordinates(player)));
            }

            if (Configuration.SendToSlack && Slack)
            {
                Slack.CallHook("Message", Lang("slackMessage")
                               .Replace("{player}", player.displayName)
                               .Replace("{steamID}", player.UserIDString)
                               .Replace("{type}", entityName)
                               .Replace("{coordinates}", FormattedCoordinates(player)));
            }

            if (Configuration.SendToStaff)
            {
                foreach (var target in BasePlayer.activePlayerList.Where(x => x.IsAdmin || HasPermission(x, "grouplimits.notify")))
                {
                    PrintToChat(target, Lang("staffMessage")
                                .Replace("{player}", player.displayName)
                                .Replace("{steamID}", player.UserIDString)
                                .Replace("{type}", entityName)
                                .Replace("{coordinates}", FormattedCoordinates(player)));
                }
            }

            if (!Configuration.WarnPlayers)
            {
                return;
            }

            PrintToChat(player, Lang("playerMessage").Replace("{limit}", Configuration.MaxPlayers.ToString()));
        }
示例#26
0
        // ------------------

        private object OnPlayerRespawned(BasePlayer player)
        {
            int id = MAData.PlayerData[player.userID].iInArea; bool success = false;

            if (PlayerExists(player) && id != -1 && MagicAreaExists(id))
            {
                if (MAData.Areas[id].Spawns.Count == 0)
                {
                    success = Convert.ToBoolean(MagicTeleportation.CallHook("InitTeleport", player, MAData.Areas[id].fMinX, MAData.Areas[id].fMinY, MAData.Areas[id].fMinZ, false, true, MAData.Areas[id].tTitle, null, 1, 3));
                }
                if (success)
                {
                    string parsed_config = GetMessage("TeleportedBack", player.UserIDString);
                    parsed_config = parsed_config.Replace("{area_title}", MAData.Areas[id].tTitle);
                    PrintToChat(player, parsed_config);
                }
                MAData.PlayerData[player.userID].iInArea = -1;
                return(false);
            }
            return(null);
        }
示例#27
0
文件: Kits.cs 项目: rustmy/incursion
        object GiveKit(BasePlayer player, string kitname)
        {
            if (string.IsNullOrEmpty(kitname))
            {
                return("Empty kit name");
            }
            kitname = kitname.ToLower();
            Kit kit;

            if (!storedData.Kits.TryGetValue(kitname, out kit))
            {
                return("This kit doesn't exist");
            }

            foreach (KitItem kitem in kit.items)
            {
                if (kitem.weapon)
                {
                    player.inventory.GiveItem(BuildWeapon(kitem.itemid, kitem.skinid, kitem.mods), kitem.container == "belt" ? player.inventory.containerBelt : kitem.container == "wear" ? player.inventory.containerWear : player.inventory.containerMain);
                }
                else
                {
                    player.inventory.GiveItem(BuildItem(kitem.itemid, kitem.amount, kitem.skinid), kitem.container == "belt" ? player.inventory.containerBelt : kitem.container == "wear" ? player.inventory.containerWear : player.inventory.containerMain);
                }
            }
            if (kit.building != null && kit.building != string.Empty)
            {
                var success = CopyPaste?.CallHook("TryPasteFromPlayer", player, kit.building, CopyPasteParameters.ToArray());
                if (success is string)
                {
                    return(success);
                }
                if (!(success is List <BaseEntity>))
                {
                    return("Something went wrong while pasting, is CopyPaste installed?");
                }
            }
            return(true);
        }
示例#28
0
        private void OnEntityBuilt(Planner planner, GameObject gObject)
        {
            BasePlayer player = planner.GetOwnerPlayer();
            BaseEntity entity = gObject.ToBaseEntity();

            if (ZoneManager?.CallHook("GetPlayerZoneIDs", player) == null)
            {
                if (permission.UserHasPermission(player.UserIDString, perm2))
                {
                    Send(player, lang.GetMessage("OnlyLand", this));
                    entity.Kill(BaseNetworkable.DestroyMode.Gib);
                }
            }
            else
            {
                String[] lands = (string[])ZoneManager?.CallHook("GetPlayerZoneIDs", player);
                if (lands == null)
                {
                    Send(player, GetMessage("ErrorLand")); return;
                }

                foreach (LandData data in landCache)
                {
                    if (data.zoneID == Convert.ToInt32(lands[0]))
                    {
                        if (player.userID != data.OwnerID)
                        {
                            Send(player, GetMessage("NoLand"));
                            entity.Kill(BaseNetworkable.DestroyMode.Gib);
                        }
                    }
                }
            }

            Send(player, "Positon: " + entity.transform.position);
        }
示例#29
0
        void OnLootEntity(BasePlayer player, BaseEntity entity)
        {
            if (bProtectionEnabled == true)
            {
                ProtectionInfo p             = null;
                var            hasProtection = storedData.Players.TryGetValue(player.userID, out p);
                if (!hasProtection)
                {
                    return;
                }

                var    corpse        = entity as LootableCorpse;
                var    sleeper       = entity as BasePlayer;
                string minutes       = Convert.ToInt32(TimeSpan.FromSeconds(p.TimeLeft).TotalMinutes).ToString();
                string parsed_config = GetMessage("cantDo", player.UserIDString);
                parsed_config = parsed_config.Replace("{minutes_left}", minutes.ToString());

                //can loot corpses own and bots
                if (corpse != null && corpse.playerSteamID != player.userID && corpse.playerSteamID > 76560000000000000L)
                {
                    SPUi(player, parsed_config);
                    timer.Once(0.01f, player.EndLooting);
                }
                //can loot friend sleeper
                else if (sleeper != null && canLootFriends && !(bool)(Friends?.CallHook("AreFriends", sleeper.userID, player.userID) ?? false))
                {
                    SPUi(player, parsed_config);
                    timer.Once(0.01f, player.EndLooting);
                }
                //can loot self or bot dropped rust_backpack
                else if (entity.PrefabName.Contains("item_drop"))
                {
                    if ((entity as DroppedItemContainer).playerSteamID == 0)
                    {
                        SPUi(player, parsed_config);
                        timer.Once(0.01f, player.EndLooting);
                    }
                    else if ((entity as DroppedItemContainer).playerSteamID != player.userID && (entity as DroppedItemContainer).playerSteamID > 76560000000000000L && !(canLootFriends && (bool)(Friends?.CallHook("AreFriends", entity.OwnerID, player.userID) ?? false)))
                    {
                        SPUi(player, parsed_config);
                        timer.Once(0.01f, player.EndLooting);
                    }
                }
                //no loot heli or supply
                else if (!canLootHeli && entity.PrefabName.Contains("heli_crate"))
                {
                    SPUi(player, parsed_config);
                    timer.Once(0.01f, player.EndLooting);
                }
                else if (!canLootDrop && entity.PrefabName.Contains("supply_drop"))
                {
                    SPUi(player, parsed_config);
                    timer.Once(0.01f, player.EndLooting);
                }
                //can loot friends deployables or own
                else if (entity.PrefabName.Contains("deployable") && entity.OwnerID != 0 && entity.OwnerID != player.userID)
                {
                    if (!(canLootFriendDeployables && (bool)(Friends?.CallHook("AreFriends", entity.OwnerID, player.userID) ?? false)))
                    {
                        SPUi(player, parsed_config);
                        timer.Once(0.01f, player.EndLooting);
                    }
                }
            }
        }
示例#30
0
        static void RunBenchmark(Plugin plugin)
        {
            object ret;
            var iterations = 100000;
            var t = DateTime.Now;
            for (var i = 0; i < iterations; i++)
            {
                plugin.DirectCallHook("OnMy", out ret, new[] { "test" });
                plugin.DirectCallHook("OnMy2", out ret, new[] { "test2" });
                plugin.DirectCallHook("OnMy3", out ret, new[] { "test3" });
                plugin.DirectCallHook("OnMy4", out ret, new[] { "test4" });
                plugin.DirectCallHook("OnMy5", out ret, new[] { "test5" });
                plugin.DirectCallHook("OnMy6", out ret, new[] { "test6" });
                plugin.DirectCallHook("OnMy7", out ret, new[] { "test7" });
                plugin.DirectCallHook("OnMy8", out ret, new[] { "test8" });
                plugin.DirectCallHook("OnMy9", out ret, new[] { "test9" });
                plugin.DirectCallHook("OnYour", out ret, new[] { "test0" });
            }
            Puts($"Calling {10 * iterations} hooks directly took {DateTime.Now - t}");

            t = DateTime.Now;
            for (var i = 0; i < iterations; i++)
            {
                plugin.CallHook("OnMy", out ret, new[] { "test" });
                plugin.CallHook("OnMy2", out ret, new[] { "test2" });
                plugin.CallHook("OnMy3", out ret, new[] { "test3" });
                plugin.CallHook("OnMy4", out ret, new[] { "test4" });
                plugin.CallHook("OnMy5", out ret, new[] { "test5" });
                plugin.CallHook("OnMy6", out ret, new[] { "test6" });
                plugin.CallHook("OnMy7", out ret, new[] { "test7" });
                plugin.CallHook("OnMy8", out ret, new[] { "test8" });
                plugin.CallHook("OnMy9", out ret, new[] { "test9" });
                plugin.CallHook("OnYour", out ret, new[] { "test0" });
            }
            Puts($"Calling {10 * iterations} hooks with Invoke took {DateTime.Now - t}");
        }
示例#31
0
        void cmdPlaceBet(ConsoleSystem.Arg arg)
        {
            Dictionary <ulong, playerinfo> playerinfos = new Dictionary <ulong, playerinfo>();

            GUIDestroy(arg.Player());
            if (arg.Player() == null)
            {
                return;
            }

            playerinfo playerbet = new playerinfo();

            if (!Currentbet.ContainsKey(arg.Player().userID))
            {
                Currentbet.Add(arg.Player().userID, new playerinfo());
            }
            else
            {
                Currentbet.TryGetValue(arg.Player().userID, out playerbet);
            }
            if (playerbet.currentbet == 0)
            {
                SendReply(arg.Player(), lang.GetMessage("NoBet", this, arg.Player().UserIDString));
                return;
            }
            int random = UnityEngine.Random.Range(DefaultMinRange, DefaultMaxRange);

            if (UseSR && ServerRewards.IsLoaded)
            {
                if (SRMinBet <= playerbet.currentbet * playerbet.multiplicator)
                {
                    double reward = FindReward(arg.Player(), (int)playerbet.currentbet, random, playerbet.multiplicator);
                    if (playerbet.currentbet * playerbet.multiplicator >= MinBetjackpot)
                    {
                        if (random == SRJackpotNumber)
                        {
                            foreach (var resetbet in Currentbet)
                            {
                                resetbet.Value.totalbet      = 0;
                                resetbet.Value.multiplicator = 1;
                                playerinfos.Add(resetbet.Key, resetbet.Value);
                            }
                            Currentbet.Clear();
                            Currentbet = playerinfos;
                            ServerRewards?.Call("AddPoints", new object[] { arg.Player().userID, reward });
                            SendReply(arg.Player(), string.Format(lang.GetMessage("Jackpot", this, arg.Player().UserIDString), random, reward));
                            return;
                        }
                    }
                    if (reward != 0 && random != SRJackpotNumber)
                    {
                        Currentbet.Remove(arg.Player().userID);
                        Currentbet.Add(arg.Player().userID, playerbet);
                        ServerRewards?.Call("AddPoints", new object[] { arg.Player().userID, reward });
                        SendReply(arg.Player(), string.Format(lang.GetMessage("WinPoints", this, arg.Player().UserIDString), random, reward));
                    }
                    else if (reward == 0)
                    {
                        SendReply(arg.Player(), string.Format(lang.GetMessage("NoWin", this, arg.Player().UserIDString), random));
                    }
                    else
                    {
                        ServerRewards?.Call("AddPoints", new object[] { arg.Player().userID, reward });
                        SendReply(arg.Player(), string.Format(lang.GetMessage("WinPoints", this, arg.Player().UserIDString), random, reward));
                    }

                    playerbet.totalbet += playerbet.currentbet * (10 / 100.0);
                    Economy?.CallHook("Withdraw", arg.Player().userID, playerbet.currentbet * playerbet.multiplicator);
                    playerbet.currentbet    = 0;
                    playerbet.multiplicator = 1;
                }
                else
                {
                    SendReply(arg.Player(), string.Format(lang.GetMessage("MiniSRBet", this, arg.Player().UserIDString), SRMinBet));
                }
            }
            else
            {
                double reward = FindReward(arg.Player(), (int)playerbet.currentbet, random, playerbet.multiplicator);
                if (random == JackpotNumber)
                {
                    foreach (var resetbet in Currentbet)
                    {
                        resetbet.Value.totalbet      = 0;
                        resetbet.Value.multiplicator = 1;
                        playerinfos.Add(resetbet.Key, resetbet.Value);
                    }
                    Currentbet.Clear();
                    Currentbet = playerinfos;
                    Economy?.CallHook("Deposit", arg.Player().userID, reward);
                    SendReply(arg.Player(), string.Format(lang.GetMessage("Jackpot", this, arg.Player().UserIDString), random, reward));
                }
                else if (reward != 0 && random != JackpotNumber)
                {
                    Currentbet.Remove(arg.Player().userID);
                    Currentbet.Add(arg.Player().userID, playerbet);
                    Economy?.CallHook("Deposit", arg.Player().userID, reward);
                    SendReply(arg.Player(), string.Format(lang.GetMessage("Win", this, arg.Player().UserIDString), random, reward));
                }
                else if (reward == 0)
                {
                    SendReply(arg.Player(), string.Format(lang.GetMessage("NoWin", this, arg.Player().UserIDString), random));
                }
                else
                {
                    Economy?.CallHook("Deposit", arg.Player().userID, reward);
                    SendReply(arg.Player(), string.Format(lang.GetMessage("Win", this, arg.Player().UserIDString), random, reward));
                }

                playerbet.totalbet += playerbet.currentbet * (10 / 100.0);
                Economy?.CallHook("Withdraw", arg.Player().userID, playerbet.currentbet * playerbet.multiplicator);
                playerbet.currentbet    = 0;
                playerbet.multiplicator = 1;
            }
            SaveData(Currentbet);
        }