void OnItemDropped(Item item, BaseEntity entity) { if (item.info.shortname != "note") { return; } if (!item.HasFlag(global::Item.Flag.OnFire)) { return; } Bounty bounty = BountyData.GetBounty(item); if (bounty == null) { return; } //attach portableBounty WorldItem wItem = entity as WorldItem; PortableBounty pBounty = wItem.gameObject.AddComponent <PortableBounty>(); pBounty.bounty = bounty; //remove Bounty from Data BountyData.removeBounty(item.uid); }
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); } }); } }