Exemple #1
0
        void OnPlayerKilled(BasePlayer victim, BasePlayer killer)
        {
#if DEBUG
            PrintToChat($"{killer?.displayName ?? "null"} kills {victim?.displayName ?? "null"}");
#endif

            Hunt hunt = null;
            hunt = HuntData.getHuntByTarget(victim);
            if (hunt != null) //Hunter kills target
            {
                if (hunt.hunter == killer && hunt.target == victim)
                {
                    hunt.end(hunt.hunter);
                }
            }
            else
            {
                hunt = HuntData.getHuntByHunter(victim);
            }
            if (hunt != null) //target kills hunter
            {
                if (hunt.target == killer && hunt.hunter == victim)
                {
                    hunt.end(hunt.target);
                }
            }
            return;
        }
Exemple #2
0
        private object OnItemAction(Item item, string action)
        {
            if (action != "crush")
            {
                return(null);
            }
            if (item.info.shortname != "skull.human")
            {
                return(null);
            }
            string skullName = null;

            if (item.name != null)
            {
                skullName = item.name.Substring(10, item.name.Length - 11);
            }
            if (string.IsNullOrEmpty(skullName))
            {
                return(null);
            }

            BasePlayer killer = item.GetOwnerPlayer();
            BasePlayer victim = BasePlayer.Find(skullName);

            if (victim == null)
            {
                return(null);
            }

#if DEBUG
            PrintToChat($"{killer} crushed {victim}'s skull!");
#endif

            Hunt hunt = null;
            hunt = HuntData.getHuntByTarget(victim);
            if (hunt == null)
            {
                hunt = HuntData.getHuntByHunter(victim);
            }
            if (hunt == null)
            {
                return(null);
            }
            if (hunt.hunter == killer || hunt.target == killer)
            {
                hunt.end(killer);
                return(null);
            }

            return(null);
        }
Exemple #3
0
        void OnPlayerSleepEnded(BasePlayer player)
        {
            if (player == null)
            {
                return;
            }
            Hunt hunt = HuntData.getHuntByTarget(player);

            if (hunt == null)
            {
                hunt = HuntData.getHuntByHunter(player);
            }
            if (hunt == null)
            {
                return;
            }
            hunt.initTicker();
        }
Exemple #4
0
        private void huntCommand(BasePlayer player, string command, string[] args)
        {
            if (!hasPermission(player, permissions.admin))
            {
                PrintToChat(player, lang.GetMessage("noPermission", this, player.UserIDString));
                return;
            }

            if (args.Length == 0)
            {
                return;
            }
            switch (args[0])
            {
            case "list":
                player.ChatMessage("Ongoing hunts:");
                foreach (Hunt h in HuntData.instance.hunts)
                {
                    player.ChatMessage($"{h.hunterName} hunts {h.bounty.targetName}");
                }
                break;

            case "end":
            case "remove":
                if (args.Length < 2)
                {
                    return;
                }
                BasePlayer target = findPlayer(args[1], player);
                Hunt       hunt   = HuntData.getHuntByHunter(target);
                if (hunt == null)
                {
                    hunt = HuntData.getHuntByTarget(target);
                }
                if (hunt == null)
                {
                    return;
                }
                hunt.end();
                player.ChatMessage("removed hunt");
                break;
            }
        }
Exemple #5
0
        public void huntButton(BasePlayer player, Bounty bounty, huntErrorType error = huntErrorType.none)
        {
            GuiContainer c         = new GuiContainer(this, "huntButton", "bountyPreview");
            Rectangle    ButtonPos = new Rectangle(710, 856, 500, 100, resX, resY, true);

            List <GuiText> textOptions = new List <GuiText>
            {
                new GuiText("Start Hunting", guiCreator.getFontsizeByFramesize(13, ButtonPos), lightGreen),
                new GuiText("You are already hunting", guiCreator.getFontsizeByFramesize(23, ButtonPos), lightRed),
                new GuiText("Target is already being hunted", guiCreator.getFontsizeByFramesize(30, ButtonPos), lightRed),
                new GuiText("Target can't be hunted yet", guiCreator.getFontsizeByFramesize(26, ButtonPos), lightRed),
                new GuiText("Hunt Active", guiCreator.getFontsizeByFramesize(11, ButtonPos), lightRed),
                new GuiText("You can't hunt yourself!", guiCreator.getFontsizeByFramesize(24, ButtonPos), lightRed),
                new GuiText("Target is offline", guiCreator.getFontsizeByFramesize(17, ButtonPos), lightRed),
                new GuiText("Too close to the target!", guiCreator.getFontsizeByFramesize(24, ButtonPos), lightRed),
            };

            Action <BasePlayer, string[]> cb = (p, a) =>
            {
                TimeSpan targetCooldown   = TimeSpan.Zero;
                TimeSpan creationCooldown = new TimeSpan(0, 0, config.creationCooldown - (int)bounty.timeSinceCreation.TotalSeconds);
                if (error == huntErrorType.huntActive)
                {
                    return;
                }
                else if (bounty.target == null)
                {
                    Effect.server.Run(errorSound, player.transform.position);
                    huntButton(player, bounty, huntErrorType.offline);
                }
                else if (bounty.target.IsSleeping())
                {
                    Effect.server.Run(errorSound, player.transform.position);
                    huntButton(player, bounty, huntErrorType.offline);
                }
                else if (bounty.hunt != null || HuntData.getHuntByHunter(p) != null)
                {
                    Effect.server.Run(errorSound, player.transform.position);
                    huntButton(player, bounty, huntErrorType.hunterAlreadyHunting);
                }
                else if (HuntData.getHuntByTarget(bounty.target) != null)
                {
                    Effect.server.Run(errorSound, player.transform.position);
                    huntButton(player, bounty, huntErrorType.targetAlreadyHunted);
                }
                else if ((bounty.timeSinceCreation.TotalSeconds < config.creationCooldown || CooldownData.isOnCooldown(bounty.target, out targetCooldown)) && !hasPermission(player, permissions.admin))
                {
                    Effect.server.Run(errorSound, player.transform.position);
                    huntButton(player, bounty, huntErrorType.targetCooldown);
                    TimeSpan select = creationCooldown;
                    if (targetCooldown > creationCooldown)
                    {
                        select = targetCooldown;
                    }
                    player.ChatMessage($"Cooldown: {select.ToString(@"hh\:mm\:ss")}");
                }
                else if (bounty.target == player && !hasPermission(player, permissions.admin))
                {
                    Effect.server.Run(errorSound, player.transform.position);
                    huntButton(player, bounty, huntErrorType.selfHunt);
                }
                else if (Vector3.Distance(player.transform.position, bounty.target.transform.position) < config.safeDistance && !hasPermission(player, permissions.admin))
                {
                    Effect.server.Run(errorSound, player.transform.position);
                    huntButton(player, bounty, huntErrorType.tooClose);
                }
                else
                {
                    Effect.server.Run(successSound, player.transform.position);
                    bounty.startHunt(p);
                    BountyData.removeBounty(bounty.noteUid);
                    player.GetActiveItem()?.Remove();
                    closeBounty(player);
                }
            };

            c.addPlainButton("button", ButtonPos, GuiContainer.Layer.hud, (error == huntErrorType.none)?darkGreen:darkRed, FadeIn, FadeOut, textOptions[(int)error], cb, blur: GuiContainer.Blur.medium);
            c.display(player);

            if (error != huntErrorType.none && error != huntErrorType.huntActive)
            {
                PluginInstance.timer.Once(2f, () =>
                {
                    if (GuiTracker.getGuiTracker(player).getContainer(this, "bountyPreview") != null)
                    {
                        huntButton(player, bounty);
                    }
                });
            }
        }