Jump to content

Search the Community

Showing results for tags 'economics'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Plugins
  • Carbon
  • Harmony
  • Maps
  • Monuments
  • Prefabs
  • Bases
  • Tools
  • Discord Bots
  • Customizations
  • Extensions

Forums

  • CF Hub
    • Announcements
  • Member Hub
    • General
    • Show Off
    • Requests
  • Member Resources
    • For Hire
  • Community Hub
    • Feedback
  • Support Hub
    • Support
    • Site Support

Product Groups

  • Creator Services
  • Host Services

Container

  • Support
  • Tutorials

container

  • Support
  • Tutorials

Posting Records Settings

  • Records

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 25 results

  1. Version 0.1.2

    14 downloads

    What is it? An addition to regular workbenches Usage Ease your players wrists by allowing them to research all remaining BPs with just a one click. Allow your players to directly use Repair Bench or Research Table from the Workbench. Permissions smartworkbench.use -- Gives user permission to see and use the Smart Workbench Features Virtual Repair Bench Virtual Research Table Research All button Supported plugins: Server Rewards Economics Configuration { "Research All currency": "scrap", "Rate (Based on scrap)": 1.0, "Type of money (1 = default currency, 2 = Server Reward points, 3 = Economics cash)": 1 } Localization { "SWResearch": "RESEARCH ALL\n{0}\n{1}", "NoResources": "Not enough resources", "Success": "Successfully learned BPs from WB lvl {0}", "AlreadyKnow": "You already know everything from this workbench", "SRPoints": "Points", "Economics": "Cash", "SWResearchTable": "RESEARCH TABLE", "SWRepairTable": "REPAIR TABLE" }
    $10.00
  2. Mevent

    Shop

    Version 1.3.5

    4,619 downloads

    Enjoy a highly customizable Shop that can be configured in game! Use NPCs as shopkeepers, and set up a shop with ease using the game interface to add, edit, or remove items on the fly! ️ Features Beautiful user interface Discount system (by permissions) Automatic shop filling (+ the plugin has support for the ItemCostCalculator plugin) Selling items (players can sell items to the store and receive money for it) Performance Adding/editing/removing items IN GAME Supports NPC Supports Custom Vending Machines Supports NoEscape Convert from ServerRewards Favorite items By default, the plugin has English, Russian and Chinese translations Transfer money between players directly in the plugin! Shop allows you to use multiple economy plugins at once (players can choose what they want to pay with) Commands shop - open shop interface shop.refill - refill shop again shop.convert.sr [clear] - convert items from ServerRewards to Shop. The option clear means clearing Shop items before convert shop.setvm [categories: cat1 cat2 ...] - add custom VM in config shop.setnpc [categories: cat1 cat2 ...] - add NPC in config shop.remove all - a console command to remove all items and categories from the plugin shop.remove item [category name/all] - a console command to remove an item (or all items) shop.remove category [category name/all] - a console command to remove a category (or all categories) shop.fill.icc [all/buy/sell] - a console command for updating prices of items in the store using ItemCostCalculator. all - updates both Price and SellPrice, buy - updates Price, sell - updates SellPrice shop.convert.from.1.2.26 – command to convert Shop plugin version 1.2.26 to version 1.3.0+ Permissions shop.setvm - for command "shop.setvm" shop.setnpc - for command "shop.setnpc" shop.free - for free item purchases shop.admin - admin permission Sort Types None Name Amount PriceDecrease PriceIncrease Category Types None – normal category for items Favorite – category for favorite items Hided – hidden category, available only in NPC stores or Vending Machines Video FAQ Q: Where can I see an example of a config? A: Config Q: How to use BankSystem to store the economy A: "Economy": { "Type (Plugin/Item)": "Plugin", "Plugin name": "BankSystem", "Balance add hook": "Deposit", "Balance remove hook": "Withdraw", "Balance show hook": "Balance", "ShortName": "scrap", "Display Name (empty - default)": "", "Skin": 0, "Lang Key (for Title)": "LangTitle", "Lang Key (for Balance)": "BalanceTitle" }, Q: How to use ServerRewards to store the economy A: "Economy": { "Type (Plugin/Item)": "Plugin", "Plugin name": "ServerRewards", "Balance add hook": "AddPoints", "Balance remove hook": "TakePoints", "Balance show hook": "CheckPoints", "ShortName": "scrap", "Display Name (empty - default)": "", "Skin": 0, "Lang Key (for Title)": "LangTitle", "Lang Key (for Balance)": "BalanceTitle" }, Q: How to use Economics to store the economy A: "Economy": { "Type (Plugin/Item)": "Plugin", "Plugin name": "Economics", "Balance add hook": "Deposit", "Balance remove hook": "Withdraw", "Balance show hook": "Balance", "ShortName": "scrap", "Display Name (empty - default)": "", "Skin": 0, "Lang Key (for Title)": "LangTitle", "Lang Key (for Balance)": "BalanceTitle" }, Q: How to use scrap to pay for items A: "Economy": { "Type (Plugin/Item)": "Item", "Plugin name": "", "Balance add hook": "", "Balance remove hook": "", "Balance show hook": "", "ShortName": "scrap", "Display Name (empty - default)": "", "Skin": 0, "Lang Key (for Title)": "LangTitle", "Lang Key (for Balance)": "BalanceTitle" }, Q: How to add KIT as shop item A: https://pastebin.com/4szBQCgz Q: How to add Command as shop item A: https://pastebin.com/bcCkzBEL Q: How do I make a weapon spawn with ammo in it? A: You need to configure the "Weapon" section in the item config: "Weapon": { "Enabled": true, "Ammo Type": "ammo.rifle.explosive", "Ammo Amount": 128 } Q: How do I make items spawn some content (liquid, weapon modifications)? A: You need to configure the "Content" section in the item config: "Content": { "Enabled": true, "Contents": [ { "ShortName": "weapon.mod.lasersight", "Condition": 100.0, "Amount": 1, "Position": -1 } ] }, Q: How to turn off the sell feature? A: You need to turn off “Enable item selling” in the config, or do it in the item setting in the game. "Enable item selling?": false, Q: How to use the ItemCostCalculator with Shop? A: You need to use command "shop.refill" (command to refill the Shop) Q: What should be the size of images for item icons? A: Typically, the image dimensions for item icons are 512x512 pixels, but any square image can suffice.
    $29.95
  3. IIIaKa

    Real PvE

    Version 0.1.0

    17 downloads

    Plugin for Real PvE servers, featuring damage prevention, anti-griefing measures, claiming vehicles, an automatic loot queue in radtowns and raid zones and much more. The ability to set "server.pve" to "true", which allows the server to have a "PvE" flag; The ability to inflict damage to one's own structures with "server.pve true"; The ability to destroy or rotate one's structures without any time constraints; The ability to force the decay of building blocks with Twigs grade, even if there is wood in the Tool Cupboard; No one, except the owner or their friends, will be able to open their loot containers (chests, storages, bodies, etc.); Players can't gather resources within the Building Privilege of someone else; The ability to schedule the killing of players if they disconnect within someone else's Building Privilege; Disabling backpack drop upon death(outside of the safe zone), even if it is full; The ability to disable 'Give' messages; The ability to modify the items given at spawn on the beach; The ability to create an unlimited number of custom permissions; The ability to allow players to bypass the queue; The ability to set limits on sleeping bags and shelters for each permission; The ability to set a multiplier for the prices of monuments and events for each permission; The ability to customize the price and amount of vehicles for each of your custom permissions; The ability to assign vehicles to each player; The ability to customize the assigned price and available amount of vehicles for each of your custom permissions; An assigned vehicle can't be damaged, looted or pushed by other players, but it can be pushed if it is within someone else's Building Privilege; The ability to loot monuments through a queue system; The ability to configure monuments, setting their looting price and time, and adjusting status bars for each monument; The ability to acquire the privilege to loot events (helicopters, tanks, and raidable bases) through a purchase; The ability to customize the price of each event types and loot attempts (lives); NPCs only aggress against players who are looting monuments or events; Only players who are looting monuments or events can inflict damage to NPCs. All permissions are created and configured in the config file under the "List of permissions" section. You can create as many permissions as needed and customize them flexibly. It is recommended to use the prefix "realpve" in the permission's name, for example: "realpve.vip". NOTE: The first permission will serve as the default permission for those who do not have any permissions. "List of permissions. NOTE: The first permission will be used by default for those who do not have any permissions.": [ { "Permission Name": "realpve.default", "Bypass Queue": false, "Limit of beds": 15, "Limit of shelters": 1, "Monuments price multiplier": 1.0, "Events price multiplier": 1.0, "Vehicles settings": { "Horse": { "Limit": 1, "Price": 200.0 }, "Bike": { "Limit": 1, "Price": 200.0 }, "Car": { "Limit": 1, "Price": 200.0 }, ... } }, { "Permission Name": "realpve.vip", "Bypass Queue": true, "Limit of beds": 20, "Limit of shelters": 2, "Monuments price multiplier": 0.9, "Events price multiplier": 0.9, "Vehicles settings": { "Horse": { "Limit": 5, "Price": 100.0 }, ... } } ] An example of a monument or event multiplier using default permissions. For example, if you set the price for the Harbor at $1000, a player with the default permission(1.0) will pay $1000 * 1 = $1000. Meanwhile, a player with a VIP permission(0.9) will pay $1000 * 0.9 = $900. However, if a player possesses a misbehaving permission with a value of 1.1, they will need to pay $1000 * 1.1 = $1100. { "ImageLibrary Counter Check": 5, "RealPVE command": "realpve", "Is it worth forcibly implementing PvE for a server? Note: When the 'server.pve' is true, there may be bugs or issues with damage to objects.": true, "Use GameTip for messages?": true, "Is it worth preventing the sending of 'Give' messages?": true, "Which currency symbol will be used?": "$", "Anti-Sleeper - Time in seconds after which a player will be killed if they disconnect while inside someone else's Building Privilege. Set to 0 to disable": 1200.0, "List of permissions. NOTE: The first permission will be used by default for those who do not have any permissions.": [], "Settings for the events": { "PatrolHelicopter": { "Price": 100.0, "DeathLimit": 5 }, "BradleyAPC": { "Price": 100.0, "DeathLimit": 5 }, "RaidableBases": { "Price": 100.0, "DeathLimit": 5 } }, "List of tracked types of monuments": [ "RadTown", "RadTownWater", "RadTownSmall", "TunnelStation" ], "Is it worth changing the list of items given at spawn on the beach?": true, "List of items for the main inventory": [], "List of items for the belt": [], "List of items for clothing": [], "Settings for the monuments": {}, "Wipe ID": "dd93ad18f97c4a51a2d9054980ba74bd", "Version": { "Major": 0, "Minor": 1, "Patch": 0 } } An example of an item list given for the main inventory: "List of items for the main inventory": [ { "ShortName": "note", "Slot": 0, "Amount": 1, "SkinID": 0, "Text": "MsgNoteText" } ] P.S. In the Text field, you need to specify the language key. Or, you can just write any text, but there won't be a translation of the text. EN: { "MsgNoteText": "Welcome to our PvE server!\nThis server utilizes the RealPVE plugin.\nYou can find more details about the plugin at the following link: https://codefling.com/plugins/real-pve", "MsgMonumentOccupied": "{1} occupied {0} in {2} minutes.", "MsgMonumentFree": "{0} is available for looting!", "MsgMonumentOfferTitle": "Unlock Treasures of {0}!", "MsgMonumentOfferDescription": "Tap the notification to pay {0}.\nAnd unlock access to undiscovered riches!", "MsgMonumentLooterDeath": "You died while looting {0}. You have {1} seconds.", "MsgMonumentLooterExit": "You have left the monument. You have {0} seconds to return!", "MsgMonumentLooterRemoved": "Time's up! You have been removed from the monument!", "MsgMonumentLootingNotFree": "You have been added to the loot queue. Loot cost: {0}", "MsgMonumentNotInQueue": "You are not in the queue! You need to re-enter the monument!", "MsgMonumentNoAccess": "no access", "MsgEventOccupied": "{0} is already occupied by {1}!", "MsgEventOfferTitle": "Claim {0}!", "MsgEventOfferDescription": "Tap the notification to pay {0}.\nAnd unlock access to undiscovered riches!", "MsgEventNewLooter": "You have claimed {0}. You have {1} death for your team.", "MsgEventDeathLimit": "{0} is no longer yours! You have exceeded your death limit!", "MsgEventComplete": "{0} destroyed at coordinates: {1}!", "MsgEventPatrolHelicopter": "Patrol Helicopter", "MsgEventBradleyAPC": "Bradley", "MsgEventRaidableBases": "Raidable Bases", "MsgPrivlidgeClear": "{0} players have been removed from the Building Privilege.", "MsgPrivlidgeClearEmpty": "Only you are authorized in the Building Privilege.", "MsgVehicleDialogTitle": "Department of Motor Vehicles", "MsgVehicleDialogDescription": "ID: \nCategory: \nRegistration fee: ", "MsgVehicleDialogDescriptionValue": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>", "MsgVehicleDialogDescriptionRegistered": "ID: \nCategory: \nRegistration date: ", "MsgVehicleDialogDescriptionValueRegistered": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>", "MsgVehicleDialogDescriptionNotOwner": "ID: \nOwner: \nCategory: \nRegistration date: ", "MsgVehicleDialogDescriptionNotOwnerValue": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>\n<b>{3}</b>", "MsgVehicleCarDialogDescription": "ID: \nCategory: \nRegistration fee: ", "MsgVehicleCarDialogDescriptionValue": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>", "MsgVehicleCarDialogDescriptionRegistered": "ID: \nCategory: \nReg date: ", "MsgVehicleCarDialogDescriptionValueRegistered": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>", "MsgVehicleCarDialogDescriptionNotOwner": "ID: \nOwner: \nCategory: \nReg date: ", "MsgVehicleCarDialogDescriptionNotOwnerValue": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>\n<b>{3}</b>", "MsgVehicleCarGarageEmpty": "The car lift is empty!", "MsgVehicleDialogLink": "Register Vehicle", "MsgVehicleDialogUnLink": "Cancel registration", "MsgVehicleDialogIncorrectPassword": "The password must consist of 4 digits!", "MsgVehicleNotOwner": "You are not the owner!", "MsgVehicleCanNotInteract": "You are not the owner or their friend!", "MsgVehicleNoPermissions": "You do not have permissions for this action!", "MsgVehicleLinked": "The {0} has been successfully linked! You have {1} out of {2} available.", "MsgVehicleUnLinked": "The {0} has been successfully unlinked!", "MsgVehicleFailedDeauthorize": "You can only deauthorize by unlinking the vehicle from you.", "MsgVehicleLimit": "Limit exceeded! You have {1} out of {2} available.", "MsgVehicleDestroyed": "Your vehicle {0}({1}) has been destroyed!", "MsgVehicleFind": "Your vehicle {0} is located in grid {1}!", "MsgVehicleClear": "Removed {0} vehicles!", "MsgVehicleClearEmpty": "No vehicles found for removal!", "MsgVehicleNotFound": "Vehicle not found!", "MsgVehicleTugboatAuthorization": "To authorize in the tugboat, it must be claim!", "MsgVehicleLandVehicle": "Land", "MsgVehicleAirVehicle": "Air", "MsgVehicleWaterVehicle": "Water", "MsgVehicleWinterVehicle": "Winter", "MsgVehicleTrainVehicle": "Train", "MsgVehicleHorse": "horse", "MsgVehicleBike": "bike", "MsgVehicleCar": "car", "MsgVehicleBalloon": "air balloon", "MsgVehicleMinicopter": "minicopter", "MsgVehicleTransportHeli": "transportHeli", "MsgVehicleAttackHeli": "attack heli", "MsgVehicleRowBoat": "row boat", "MsgVehicleRHIB": "RHIB", "MsgVehicleTugBoat": "tugboat", "MsgVehicleSubmarineOne": "small submarine", "MsgVehicleSubmarineTwo": "submarine", "MsgVehicleSnowmobile": "snowmobile", "MsgVehicleTrain": "train", "MsgFree": "Free", "MsgNoDate": "null", "MsgEconomicsNotEnough": "Not enough funds!" } RU: { "MsgNoteText": "Добро пожаловать на наш PvE сервер!\nДанный сервер использует RealPVE плагин.\nПодробней о плагине можно узнать по ссылке: https://codefling.com/plugins/real-pve", "MsgMonumentOccupied": "{1} занял {0} на {2} минут.", "MsgMonumentFree": "{0} можно лутать!", "MsgMonumentOfferTitle": "Откройте сокровища {0}!", "MsgMonumentOfferDescription": "Нажми на уведомление для оплаты {0}.\nИ разблокируй доступ к неизведанным богатствам!", "MsgMonumentLooterDeath": "Вы умерли во время лутания {0}. У вас есть {1} секунд.", "MsgMonumentLooterExit": "Вы покинули монумент. У вас есть {0} секунд на возвращение!", "MsgMonumentLooterRemoved": "Время вышло! Вы были удалены из монумента!", "MsgMonumentLootingNotFree": "Вас добавили в очередь на лутание. Стоимость лутания: {0}", "MsgMonumentNotInQueue": "Вас нет в очереди! Вам необходимо перезайти в монумент!", "MsgMonumentNoAccess": "нет доступа", "MsgEventOccupied": "{0} уже занят игроком {1}!", "MsgEventOfferTitle": "Займите {0}!", "MsgEventOfferDescription": "Нажми на уведомление для оплаты {0}.\nИ разблокируй доступ к неизведанным богатствам!", "MsgEventNewLooter": "Вы заняли {0}. У вас на команду есть {1} жизней.", "MsgEventDeathLimit": "{0} больше не ваше! Вы исчерпали свой лимит жизней!", "MsgEventComplete": "{0} уничтожен в координатах: {1}!", "MsgEventPatrolHelicopter": "Патрульный вертолет", "MsgEventBradleyAPC": "Танк", "MsgEventRaidableBases": "Raidable Bases", "MsgPrivlidgeClear": "Из шкафа выписано {0} ироков.", "MsgPrivlidgeClearEmpty": "Кроме вас в шкафу ни кто не авторизован.", "MsgVehicleDialogTitle": "ГИБДД", "MsgVehicleDialogDescription": "ID: \nКатегория: \nСтоимость регистрации: ", "MsgVehicleDialogDescriptionValue": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>", "MsgVehicleDialogDescriptionRegistered": "ID: \nКатегория: \nДата регистрации: ", "MsgVehicleDialogDescriptionValueRegistered": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>", "MsgVehicleDialogDescriptionNotOwner": "ID: \nВладелец: \nКатегория: \nДата регистрации: ", "MsgVehicleDialogDescriptionNotOwnerValue": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>\n<b>{3}</b>", "MsgVehicleCarDialogDescription": "ID: \nКатегория: \nСтоимость: ", "MsgVehicleCarDialogDescriptionValue": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>", "MsgVehicleCarDialogDescriptionRegistered": "ID: \nКатегория: \nДата: ", "MsgVehicleCarDialogDescriptionValueRegistered": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>", "MsgVehicleCarDialogDescriptionNotOwner": "ID: \nВладелец: \nКатегория: \nДата: ", "MsgVehicleCarDialogDescriptionNotOwnerValue": "<b>{0}</b>\n<b>{1}</b>\n<b>{2}</b>\n<b>{3}</b>", "MsgVehicleCarGarageEmpty": "Подъемник пустой!", "MsgVehicleDialogLink": "Поставить на учет", "MsgVehicleDialogUnLink": "Снять с учета", "MsgVehicleDialogIncorrectPassword": "Пароль должен состоять из 4-х цифр!", "MsgVehicleNotOwner": "Вы не являетесь владельцем!", "MsgVehicleCanNotInteract": "Вы не являетесь владелецем или его другом!", "MsgVehicleNoPermissions": "У вас нет прав для этого действия!", "MsgVehicleLinked": "{0} успешно привязан(а)! У вас {1} из {2} доступных.", "MsgVehicleUnLinked": "{0} успешно отвязан(а)!", "MsgVehicleFailedDeauthorize": "Вы можете выписаться только при отвязки транспорта от вас.", "MsgVehicleHorseLimit": "Лимит превышен! У вас {1} из {2} доступных.", "MsgVehicleDestroyed": "Ваше транспортное средство {0}({1}) было уничтожено!", "MsgVehicleFind": "Ваше транспортное средство {0} находится в квадрате {1}!", "MsgVehicleClear": "Удалено {0} транспортных средств!", "MsgVehicleClearEmpty": "Транспортные средства для удаления не найдены!", "MsgVehicleNotFound": "Транспортное средство не найдено!", "MsgVehicleTugboatAuthorization": "Для авторизации в буксире, его необходимо поставить на учет!", "MsgVehicleLandVehicle": "Наземный", "MsgVehicleAirVehicle": "Воздушный", "MsgVehicleWaterVehicle": "Водный", "MsgVehicleWinterVehicle": "Зимний", "MsgVehicleTrainVehicle": "ЖД", "MsgVehicleHorse": "Лошадь", "MsgVehicleBike": "Мотоцикл", "MsgVehicleCar": "Машина", "MsgVehicleBalloon": "Воздушный шар", "MsgVehicleMinicopter": "Мини коптер", "MsgVehicleTransportHeli": "Корова", "MsgVehicleAttackHeli": "Боевой вертолет", "MsgVehicleRowBoat": "Лодка", "MsgVehicleRHIB": "Патрульная лодка", "MsgVehicleTugBoat": "Буксир", "MsgVehicleSubmarineOne": "Маленькая подлодка", "MsgVehicleSubmarineTwo": "Подлодка", "MsgVehicleSnowmobile": "Снегоход", "MsgVehicleTrain": "Поезд", "MsgFree": "Бесплатно", "MsgNoDate": "пусто", "MsgEconomicsNotEnough": "Не достаточно средств!" } vehicle: find - helps to find a player's vehicle; unlink - unlinks the vehicle without the need to approach it; clear - unlinks all vehicles. Example: /realpve vehicle find *netID* This plugin provides the ability to claim vehicles, thereby preventing theft and griefing from other players. In permissions, you can set the price and quantity restrictions for each type of vehicle, ensuring flexible customization according to your preferences. An assigned vehicle can't be damaged, looted or pushed by other players, but it can be pushed if it is within someone else's Building Privilege. This plugin introduces queue system and loot purchases for monuments. All monuments are configured in the config file under the "Settings for the monuments" section. You can customize the price and time for looting each monument. Within monuments, only the "Looter" and his friends have the ability to loot, pick up items or damage entities. Additionally, NPCs within monuments do not aggress against other players and do not receive damage from them. If a player dies within the monument, they will have a grace period to return. This allows players to safely loot monuments without fear of griefing. Example of monument configuration: "ferry_terminal_1": { "Type": "RadTown", "ShowSuffix": true, "Broadcast": true, "LootingTime": 900, "Price": 0.0, "BarSettings": { "Order": 10, "Height": 26, "Main_Color": "#A064A0", "Main_Transparency": 0.8, "Main_Material": "", "Image_URL": "https://i.imgur.com/mn8reWg.png", "Image_Sprite": "", "Image_IsRawImage": false, "Image_Color": "#A064A0", "Text_Size": 12, "Text_Color": "#FFFFFF", "Text_Font": "RobotoCondensed-Bold.ttf", "SubText_Size": 12, "SubText_Color": "#FFFFFF", "SubText_Font": "RobotoCondensed-Bold.ttf" } } Type - This field serves only as an indicator for you. The changes won't have any impact; ShowSuffix - Suffix display. Some monuments (for example Warehouses) have suffixes in the name, like "Warehouse #12"; Broadcast - Enabling or disabling broadcasts when a monument is occupied or vacated; LootingTime - Time allocated for looting the monument; Price - The price for which you can start looting the monument. 0 means looting is free; BarSettings - Settings for the Advanced Status Bar. You can also choose the types of monuments by specifying them in the config file under the "List of tracked types of monuments" section. A list of all available types can be viewed on the MonumentsWatcher's page in the "Developer API" section. "List of tracked types of monuments": [ "RadTown", "RadTownWater", "RadTownSmall", "TunnelStation" ] Events, similar to monuments, offer the opportunity to claim events. All events are configured in the config file under the "Settings for the events" section. You can customize the price of looting and looting attempts(deaths, including friends). Just like in monuments, only the "Looter" and his friends have the ability to loot and damage entities. Additionally, in events, NPCs do not aggress against other players. If a player(including friends) exceeds the death limit, the event became free, thereby providing other players with the opportunity to claim the event. Example of event configuration: "Settings for the events": { "PatrolHelicopter": { "Price": 100.0, "DeathLimit": 5 }, "BradleyAPC": { "Price": 100.0, "DeathLimit": 5 }, "RaidableBases": { "Price": 100.0, "DeathLimit": 5 } } Price - The price to claim the event. 0 means looting is free; DeathLimit - Limit of deaths after which the event becomes free.
    $29.99
  4. Version 0.1.0

    8 downloads

    Plugin rewarding players for their in-game activity. The ability to receive rewards for gathering resources; The ability to receive rewards for: killing players and NPCs; destroying barrels and road signs; The ability to receive rewards for the first opening of loot crates; The ability to receive rewards for collecting resources; The ability to receive rewards for planting plants. { "Status Bar Settings": { "Order": 20, "Height": 26, "Main_Color": "#84AB49", "Main_Transparency": 0.8, "Main_Material": "", "Image_URL": "https://i.imgur.com/k8jq7yY.png", "Image_Sprite": "", "Image_IsRawImage": false, "Image_Color": "#B9D134", "Text_Size": 12, "Text_Color": "#DAEBAD", "Text_Font": "RobotoCondensed-Bold.ttf", "SubText_Size": 12, "SubText_Color": "#DAEBAD", "SubText_Font": "RobotoCondensed-Bold.ttf" }, "List of multipliers for rewards, for each group permission": { "realpve.default": 1.0, "realpve.vip": 1.1 }, "Gather Rewards": { "wood": 0.5, "stones": 1.0, "metal.ore": 1.5, "sulfur.ore": 2.0 }, "Kill Rewards": { "player": 1.0, "loot-barrel": 0.5, "loot_barrel": 0.5, "oil_barrel": 1.0, "roadsign": 0.5, "scientistnpc": 1.5, "npc_tunneldweller": 1.5, "npc_underwaterdweller": 1.5, "scientistnpc_junkpile_pistol": 1.0, "scientistnpc_heavy": 2.0, "boar": 1.0, "stag": 1.5, "wolf": 2.0, "bear": 2.0, "boar.corpse": 0.5, "stag.corpse": 0.75, "wolf.corpse": 1.0, "bear.corpse": 1.0, "patrolhelicopter": 50.0, "bradleyapc": 50.0 }, "First Loot Open Rewards": { "foodbox": 0.5, "crate_food_1": 0.5, "crate_food_2": 0.5, "crate_normal_2_food": 1.0, "wagon_crate_normal_2_food": 1.0, "crate_normal_2_medical": 1.0, "vehicle_parts": 0.5, "crate_basic": 0.5, "crate_normal_2": 1.0, "crate_mine": 1.0, "crate_tools": 1.5, "crate_normal": 2.0, "crate_elite": 2.5, "crate_underwater_basic": 0.5, "crate_underwater_advanced": 1.0, "crate_medical": 0.5, "crate_fuel": 1.0, "crate_ammunition": 1.0, "heli_crate": 10.0, "bradley_crate": 10.0, "codelockedhackablecrate": 30.0, "codelockedhackablecrate_oilrig": 30.0 }, "Pickup Rewards": { "Wood": 0.1, "Stone": 0.25, "Metal Ore": 0.5, "Sulfur Ore": 0.75, "Diesel Fuel": 1.0, "Bones": 0.1, "Corn": 0.1, "Potato": 0.1, "Pumpkin": 0.1, "Wild Mushroom": 0.1, "Hemp Fibers": 0.1, "Black Berry": 0.1, "Blue Berry": 0.1, "Green Berry": 0.1, "Red Berry": 0.1, "White Berry": 0.1, "Yellow Berry": 0.1 }, "Planting Rewards": { "hemp.entity": 0.1, "corn.entity": 0.1, "pumpkin.entity": 0.1, "potato.entity": 0.1, "black_berry.entity": 0.1, "blue_berry.entity": 0.1, "green_berry.entity": 0.1, "red_berry.entity": 0.1, "white_berry.entity": 0.1, "yellow_berry.entity": 0.1 }, "Version": { "Major": 0, "Minor": 1, "Patch": 0 } } EN: { "MsgTextBar": "Bonus" } RU: { "MsgTextBar": "Бонус" }
    $2.99
  5. Mevent

    Bank System

    Version 1.3.8

    700 downloads

    Adds a banking system to the game. It is an extended system of economics. Features ATM system (each player can install his own ATM and receive profit from it) ATMs can break ATMs can be repaired Money transfer system between players HumanNPC support Ability for players to earn money Adds a new item to the game (banknotes) Auto Wipe (each item can be customized) Working through third-party economy plugins (optional) Conversion from ServerRewards and Economics Commands bank - open the bank interface bank.givenote [target] [amount] - give banknotes to the player bank.giveatm [target] - give ATM to the player bank.setbalance [target] - set balance to the player bank.deposit [target] - deposit money to the player bank.withdraw [target] - withdraw money from a player bank.transfer [player] [target] - transferring money from a player to another player bank.wipe [type] (0 - all, 1 - players, 2 - logs, 3 - ATMs) - wipe data bank.convert.economics - convert from Economics bank.convert.serverrewards- convert from ServerRewards Hooks private object CanPlayerCreateCard(BasePlayer player) private void OnPlayerCreatedCard(BasePlayer player) private void OnBalanceChanged(ulong member, int amount) API private bool HasCard(BasePlayer player) private bool HasCard(ulong member) private int Balance(BasePlayer player) private int Balance(ulong member) private bool Deposit(BasePlayer player, int amount) private bool Deposit(string member, int amount) private bool Deposit(ulong member, int amount) private bool Withdraw(BasePlayer player, int amount) private bool Withdraw(string member, int amount) private bool Withdraw(ulong member, int amount) private bool Transfer(BasePlayer member, BasePlayer target, int amount) private bool Transfer(string member, string target, int amount) private bool Transfer(ulong member, ulong target, int amount) Permissions You can set permission in config, for example: "Permission (example: banksystem.use)": "banksystem.use", You can also configure permissions for ATM breakage % FAQ Q: Where can I see an example of a config? A: Config
    $29.95
  6. Krungh Crow

    Garage

    Version 2.0.4

    1,198 downloads

    Spawn in a lift ,parts ,modules ,chassis or car with permissions and shared cooldown. They still need to be fixed before driven ! Features : Updating to v2.0.0 will reset the garage prices only (backup the cfg file) !!! Set kits and sell them through the shop Use of Economics or ServerRewards (combined to 1 button as of v2.0.0) Configurable colors/backgrounds/transparency/buttons This is a Garage so no complete vehicles incl parts attached are planned in the near future Logging of each sale or attempt to a misbuy is saved in the log folder Garage is now able to use HumanNPC vendors. Changes made in 2.0.0 Rewrite of the plugin (phase 1) Added additional kit checks and added a chat message if not. Currency will now be combined into 1 purchase button for Eco/SR Backup your config price settings (images colors remain) Naming of prices changed this will reset all prices to the ones set in the plugin. Relocated buttons and images accordingly Added the Armored Passenger Module Permissions : garage.use : for using the Plugin garage.usenpc : Grants permission to use HumanNPC shops (new) garage.nocost : for free purchases (Shows in the UI you have the Free perm) garage.nocooldown : to have no cooldown on spawning them in Commands : /garage ui or /garage : to open Garage Shop /garage info : to show the commands and info in chat Logfiles : Log files are found in the oxide.logs folder garage_kits : All actions by using Kits will be in this file saving purchases errors and/or if the player didnt had enough cash garage_sales : Will list all sales/errors and/or players didnt had enough cash regarding buying parts/cars/chassis/modules Configuration : For use with HumanNPC : you can add multiple npc id's to the configuration. Make sure the npc has a clear area to spawn the chassis and cars to make sure there is room for them. Place the npc outside would be highly recommended. You can also only give the Cars and Chassis a Shared cooldown to avoid spamming. What can you change in the cfg.json ? Can you spawn inside (false by default) Cooldown (only cars/chassis) Using ServerRewards Settings Using Economics Settings Background image Kit Images Modules images Parts Images Button colors (cars/chassis/modules/parts) , (lift) and (close button) each share their colors ( ). Button text colors (cars/chassis/modules/parts) , (lift) ,(close button) and kits each share their colors ( ). Can change the Garage Title text on topside and its color which is (Garage By Krungh Crow v1.0.8) by default. Prices for all the cars/chassis/mods/parts and kits For making kits u make a "KIT" you would normaly do then add just the kits name incl uppercases for example The kits can be configured like normal the cooldowns will be taken over from the kits plugin so if u set the cooldowns in the Kits.json config file it will use that cooldown same goes for the amount of times u can take it (kit Title) : To show a short description/name for the kit (Icon Url) : Link to the image used for the kit (Kit name ID) : full kit name (use the kitnameID from the kits plugin) (Price) : Price tag Set prices to 0 if you will be using the cooldowns from the kits plugin !!!!!! Example config below : { "Cooldown": 5, "BuildingSpawn": false, "NPC Vendor settings": { "Use NPC shop": true, "NPC Id's": [ "5769350144" ] }, "Use ServerRewards": true, "Use Economics": true, "Garage shop Title": "Midlands PVE Garage Shop", "Garage Text color (RGBA)": "1 1 1 1", "Button color (RGBA)": "0.05 0 0 0.80", "Button text color (RGBA)": "1 1 1 0.90", "Menu Button color (RGBA)": "0.0 0.0 0.0 0.0", "Close Button color (RGBA)": "0.0 0.0 0.0 0.0", "Close Button Text color (RGBA)": "1 1 1 0.90", "Button Lift color (RGBA)": "0.05 0 0 0.80", "Button Lift Text color (RGBA)": "1 1 1 0.90", "Use Background Image": false, "Garage shop Background Image Url": "https://cdn.discordapp.com/attachments/718923255574167665/768477956007526400/Garage-Poster.png", "Garage shop Background Transparancy (0-1)": 0.95, "Main page button icon Image Url": "https://i.ibb.co/pLdsMQV/Green.png", "Modules page button icon Image Url": "https://i.ibb.co/s1xqmTX/Purple.png", "Parts page button icon Image Url": "https://i.ibb.co/Cbtx3rc/Blue.png", "Close button icon Image Url": "https://i.ibb.co/84xBH5Y/Red.png", "Kits text color (RGBA)": "1 1 1 0.90", "Kit 1 (kit Title)": "HQ Engine Parts", "Kit 1 (Icon Url)": "https://i.ibb.co/2NpSvZX/parts.png", "Kit 1 (kit name ID)": "car1", "Kit 1 (Price)": 3999, "Kit 2 (kit Title)": "Mechanics Outfit", "Kit 2 (Icon Url)": "https://i.ibb.co/Vm5drNd/mechanics-outfit.png", "Kit 2 (kit name ID)": "mechanic", "Kit 2 (Price)": 500, "Kit 3 (kit Title)": "Refuell", "Kit 3 (Icon Url)": "https://vignette.wikia.nocookie.net/play-rust/images/2/26/Low_Grade_Fuel_icon.png/revision/latest?cb=20151110002210", "Kit 3 (kit name ID)": "fueling", "Kit 3 (Price)": 500, "Kit 4 (kit Title)": "Carkit 4 description", "Kit 4 (Icon Url)": "https://i.ibb.co/JBmNcC0/carkitpink.png", "Kit 4 (kit name ID)": "car4", "Kit 4 (Price)": 0, "Kit 5 (kit Title)": "Carkit 5 description", "Kit 5 (Icon Url)": "https://i.ibb.co/R3SXcvY/carkitred.png", "Kit 5 (kit name ID)": "car5", "Kit 5 (Price)": 0, "Kit 6 (kit Title)": "Carkit 6 description", "Kit 6 (Icon Url)": "https://i.ibb.co/Fs0VqDQ/carkitgreen.png", "Kit 6 (kit name ID)": "car6", "Kit 6 (Price)": 0, "Lift (Icon Url)": "https://i.ibb.co/Sfd2kxH/modularcarlift.png", "Lift (Button Text)": "Get A lift", "lift (Price)": 2500, "Simple Cockpit (Image Url)": "https://i.ibb.co/tcg16yg/vehicle-1mod-cockpit.png", "Simple Cockpit (Price)": 1000, "Armored Cockpit (Image Url)": "https://i.ibb.co/SPvDV9c/vehicle-1mod-cockpit-armored.png", "Armored Cockpit (Price)": 1500, "Cockpit+Engine (Image Url)": "https://i.ibb.co/TtLNz4G/vehicle-1mod-cockpit-with-engine.png", "Cockpit+Engine (Price)": 1250, "Large Fuell Tank (Image Url)": "https://i.ibb.co/2YSbbRD/vehicle-2mod-fuel-tank.png", "Large Fuelltank (Price)": 1000, "Engine (Image Url)": "https://i.ibb.co/1dzkVVV/vehicle-1mod-engine.png", "Engine (Price)": 1250, "Short Flatbed (Image Url)": "https://i.ibb.co/s62zLrg/vehicle-1mod-flatbed.png", "Short Flatbed (Price)": 1000, "Long Flatbed (Image Url)": "https://i.ibb.co/VNMpXtp/vehicle-2mod-flatbed.png", "Long Flatbed (Price)": 1250, "Passenger Module (Image Url)": "https://i.ibb.co/3cBtXSL/vehicle-2mod-passengers.png", "Passenger Module (Price)": 1500, "Rear Seat (Image Url)": "https://i.ibb.co/KLJsdXQ/vehicle-1mod-rear-seats.png", "Rear Seat (Price)": 1250, "Storage Module Image Url": "https://i.ibb.co/BN2qFzp/vehicle-1mod-storage.png", "Storage Module (Price RP": 1500, "Armored Passenger Module (Image Url)": "https://rustlabs.com/img/items180/vehicle.1mod.passengers.armored.png", "Armored Passenger Module (Price)": 1500, "Camper Module (Image Url)": "https://i.ibb.co/kQN6XQC/vehicle-2mod-camper.png", "Camper Module (Price)": 2000, "Taxi Module (Image Url)": "https://i.ibb.co/HCLzx2S/vehicle-1mod-taxi.png", "Taxi Module (Price)": 1500, "Pistons Icon Url": "https://i.ibb.co/2qh1Q0G/pistons.png", "LQ Piston (Price)": 500, "MQ Piston (Price)": 750, "HQ Piston (Price)": 1000, "Crankshafts Icon Url": "https://i.ibb.co/THY34QF/cranks.png", "LQ Crankshaft (Price)": 500, "MQ Crankshaft (Price)": 750, "HQ Crankshaft (Price)": 1000, "Sparkplugs Icon Url": "https://i.ibb.co/YQ3g4sf/plugs.png", "LQ Sparkplug (Price)": 500, "MQ Sparkplug (Price)": 750, "HQ Sparkplug (Price)": 1000, "Valves Icon Url": "https://i.ibb.co/qkYPV9R/valves.png", "LQ Valve (Price)": 500, "MQ Valve (Price)": 750, "HQ Valve (Price)": 1000, "Carburetor Icon Url": "https://i.ibb.co/Wk9yQqz/carbs.png", "LQ Carburetor (Price)": 500, "MQ Carburetor (Price)": 750, "HQ Carburetor (Price)": 1000, "Small Chassis (image Url)": "https://i.ibb.co/VMbLdzN/chas2.png", "Small Chassis (Price)": 2500, "Medium Chassis (image Url)": "https://i.ibb.co/q0QRcqn/chas3.png", "Medium Chassis (Price)": 3500, "Large Chassis (image Url)": "https://i.ibb.co/164Fxxs/chas4.png", "Large Chassis (Price)": 4500, "Small Car (image Url)": "https://i.ibb.co/Tk38DWd/howard-schechtman-car1.jpg", "Small Car (Price)": 5000, "Nedium Car (image Url)": "https://i.ibb.co/vJWGtcw/howard-schechtman-car2.jpg", "Medium Car (Price)": 7500, "Large Car (image Url)": "https://i.ibb.co/zXpDRht/howard-schechtman-car3.jpg", "Large Car (Price)": 10000 } Localization : English language file included to use a diffrent language just make a new file in the language folder. { "NoPermission": "You do not have permission to use that command!", "InvalidInput": "Please enter a valid command!", "IndoorsBlocked": "You cannot spawn indoors only outside!", "Info": "\n\n/garage ui : to open the Garage Shop.\n/givelift to buy a lift directly", "Cooldown": "You are still on a cooldown!", "Spawned": "You spawned a {0}!", "Prefix": "<color=yellow>[Garage]</color> ", "Lift": "You just recieved a lift!", "BoughtSmallCar": "You just Bought a Small Car, Have fun!", "BoughtMediumCar": "You just Bought a Medium Car, Have fun!", "BoughtlargeCar": "You just Bought a Large Car, Have fun!", "BoughtSmallChas": "You just Bought a Small Chassis, Have fun!", "BoughtMediumChas": "You just Bought a Medium Chassis, Have fun!", "BoughtlargeChas": "You just Bought a Large Chassis, Have fun!", "FreeCar": "You just Got a free Car, Have fun!", "FreeChas": "You just Got a free Chassis, Have fun!", "Nokit": "No kit has been assigned!", "ReceivedCockpit": "You just recieved a simple cockpit!", "ReceivedCockpitArmored": "You just recieved a Armored Cockpit!", "ReceivedCockpitEngine": "You just recieved a Cockpit with a Engine attached!", "ReceivedFuelltank": "You just recieved a empty Large Fuelltank!", "ReceivedEngine": "You just recieved a Engine Module!", "ReceivedSingleFlatbed": "You just recieved a short Flatbed Module!", "ReceivedDualFlatbed": "You just recieved a Long Flatbed Module!", "ReceivedPassengers": "You just recieved a Passenger Module!", "ReceivedRearseat": "You just recieved a Rear Seat Module!", "ReceivedStoragemodule": "You just recieved a Storage Module!", "ReceivedArmoredPasmodule": "You just recieved a Passengers Armored Module!", "ReceivedTaximodule": "You just recieved a Taxi Module!", "ReceivedLowPart": "You just recieved a Low quality engine part!", "ReceivedMedPart": "You just recieved a Medium quality engine part!", "ReceivedHighPart": "You just recieved a High quality engine part!", "NoBallance": "You Dont have enough points!", "NotSet": "This currency is not set to true or not installed on this server!", "OnlyNPC": "The garage is only available at the Garage NPC in Town", "ReceivedCamper": "You just recieved a Camper Module!", "UIFreeBanner": "<color=green>For having Permission ,You get Items for Free</color> " } Credits * Steenamaroo for help with the cooldowns and ui
    Free
  7. IIIaKa

    Balance Bar

    Version 0.1.2

    49 downloads

    This plugin displays the player's balance in the status bar. Depends on Economics and AdvancedStatus plugins. The ability to always display the player's balance, or only when they are in a safe zone or building privilege zone; The ability to specify the currency symbol; The ability to specify the display side of the currency symbol; The ability to specify the order of the bar; The ability to change the height of the bar; The abillity to customize the color and transparency of the background; The ability to set a material for the background; The ability to switch between CuiRawImageComponent and CuiImageComponent for the image; The abillity to set own image and customize the color of the image; The abillity to set sprite instead of the image; The ability to specify custom text. Additionally, customization options for the color, size, and font of the text. { "ImageLibrary Counter Check": 5, "Which currency symbol will be used?": "$", "On which side should the currency symbol be displayed? True - after the balance(right), false - before the balance(left)": true, "Is it worth displaying the balance only when players in the safe zone or building privilege?": true, "Status. Bar - Height": 26, "Status. Bar - Order": 10, "Status. Background - Color": "#6375B3", "Status. Background - Transparency": 0.8, "Status. Background - Material(empty to disable)": "", "Status. Image - URL": "https://i.imgur.com/jKeUqSD.png", "Status. Image - Sprite(empty to use image from URL)": "", "Status. Image - Is raw image": false, "Status. Image - Color": "#A1DBE6", "Status. Text - Size": 12, "Status. Text - Color": "#FFFFFF", "Status. Text - Font(https://umod.org/guides/rust/basic-concepts-of-gui#fonts)": "RobotoCondensed-Bold.ttf", "Status. SubText - Size": 12, "Status. SubText - Color": "#FFFFFF", "Status. SubText - Font(https://umod.org/guides/rust/basic-concepts-of-gui#fonts)": "RobotoCondensed-Bold.ttf", "Version": { "Major": 0, "Minor": 1, "Patch": 2 } } EN: { "MsgText": "Balance" } RU: { "MsgText": "Баланс" }
    $3.99
  8. Wrecks

    The Florist

    Version 0.0.8

    33 downloads

    Purchase a Guide, Forage, Sell, Profit. Works with Kits & Marker Manager. Requires Economics or Server Rewards to handle sales. With “The Florist” you open yet another lane of Economic gameplay for your server. Set a Guide fee in order to be able to handle and identify flora that are bonus customizable items, for players to sell for monetary gain. Set drop rates on all of your Custom Florist Items, Sell to the Florist with Economics or Server Rewards. Output all Sales to Discord to track your Economy and make Adjustments as needed to The Florist NPCS “Bonus Buy” & “Discount Buy” as needed to suit your taste. Dispensers of Florist Items Auto Spawned Dispensers berry-black berry-blue berry-green berry-red berry-white berry-yellow hemp mushroom-cluster-5 mushroom-cluster-6 corn potato pumpkin Video Demo Commands /gf – Requires Admin Permission – Will spawn your custom Florist items into your inventory, Good for testing sale rates. /spawnflorist – Requires Admin Permission – Will spawn a Florist NPC in your Position. /removeflorist– Requires Admin Permission – Will remove the Florist NPC you are looking at. /BuyFG – With Sufficient funds, the player can purchase a Florist Guide Config { "Discord Webhook URL": "INSERT_WEBHOOK_URL", "Chat Icon": 0, "NPC Kit Enabled?": false, "NPC Kit Name?": "", "Florist license Fee?": 10000, "Remove license on Death?": true, "Sales to NPC Enabled?": true, "Maximum Amount of Items Sold at a Time": 3, "NPC Interaction Cooldown In Seconds": 3, "Economy Plugin - 1 Economics - 2 Server Rewards": 1, "Amount of each Item to spawn via Command?": 5, "Custom Wares": [ { "Item Name": "Wild BlueBonnet", "Skin ID": 3152163439, "Is Marketable?": true, "Sale Price?": 15, "Max Discount Buy Variation in %? (Negative Values) (To Simulate Supply & Demand)": -10, "Maximum Bonus Variation in %? (Positive Values) (To Simulate Supply & Demand)": 5, "Chance out of 100% to Spawn on AutoSpawn Growable Collect?": 9 }, { "Item Name": "Orchid", "Skin ID": 3152186892, "Is Marketable?": true, "Sale Price?": 29, "Max Discount Buy Variation in %? (Negative Values) (To Simulate Supply & Demand)": -10, "Maximum Bonus Variation in %? (Positive Values) (To Simulate Supply & Demand)": 5, "Chance out of 100% to Spawn on AutoSpawn Growable Collect?": 12 }, { "Item Name": "Creeping Thyme", "Skin ID": 3152188419, "Is Marketable?": true, "Sale Price?": 79, "Max Discount Buy Variation in %? (Negative Values) (To Simulate Supply & Demand)": -10, "Maximum Bonus Variation in %? (Positive Values) (To Simulate Supply & Demand)": 5, "Chance out of 100% to Spawn on AutoSpawn Growable Collect?": 4 }, { "Item Name": "Tobacco", "Skin ID": 3152190238, "Is Marketable?": true, "Sale Price?": 39, "Max Discount Buy Variation in %? (Negative Values) (To Simulate Supply & Demand)": -10, "Maximum Bonus Variation in %? (Positive Values) (To Simulate Supply & Demand)": 5, "Chance out of 100% to Spawn on AutoSpawn Growable Collect?": 6 }, { "Item Name": "Chrysanthemum", "Skin ID": 3152191313, "Is Marketable?": true, "Sale Price?": 48, "Max Discount Buy Variation in %? (Negative Values) (To Simulate Supply & Demand)": -10, "Maximum Bonus Variation in %? (Positive Values) (To Simulate Supply & Demand)": 5, "Chance out of 100% to Spawn on AutoSpawn Growable Collect?": 8 } ], "NPC Clothing Options": [ { "Shortname": "burlap.trousers", "Skin": 922959091 }, { "Shortname": "shirt.tanktop", "Skin": 922934835 }, { "Shortname": "burlap.shoes", "Skin": 922966471 }, { "Shortname": "hat.beenie", "Skin": 922870775 }, { "Shortname": "burlap.gloves", "Skin": 922904866 }, { "Shortname": "jacket", "Skin": 922872799 } ] } Lang { "NoPerms": "[<color=#12ffb8>The Florist</color>] You do not have permission to run this <color=red>Command</color>!", "NoWares": "[<color=#12ffb8>The Florist</color>] :nervous: You have no <color=yellow>Items</color> on you that I am in the Market for. \nSwing by when you do, though! \n\n:happy:", "WaresSpawned": "[<color=#12ffb8>The Florist</color>] :wave: <color=green>All</color> <color=#12ffb8>Florist Items</color> have been deposited to your Inventory.", "FloristCooldownMessage": "[<color=#12ffb8>The Florist</color>] :wave: If you dont mind, give me <color=green>{0}</color> second(s), I'm pressing this specimen...", "EconomicsMessage": "[<color=#12ffb8>The Florist</color>] :eyes: \n\n Best I can value this at is <color=#85bb65>$</color><color=yellow>{0}</color> for your <color=orange>{1}x</color> <color=green>{2}</color>(s).", "SrMessage": "[<color=#12ffb8>The Florist</color>] :eyes: \n\n Best I can value this at is <color=orange>{0}</color> <color=#cd5c5c>RP</color> for your <color=yellow>{1}x</color> <color=green>{2}</color>(s).", "SaleDisabled": "[<color=#12ffb8>The Florist</color>] <color=orange>Sales</color> are Disabled in the Config, Enable and Try again.", "NoFloristLicense": "[<color=#12ffb8>The Florist</color>] You don't remember how to forage delicate <color=orange>Floral Items</color>. \nUse <color=orange>/BuyFG</color> to purchase the Guide from <color=#12ffb8>The Florist</color>.", "AlreadyHasLicense": "[<color=#12ffb8>The Florist</color>] You already have the <color=orange>Florist Guide</color>.", "BuyFloristLicenseSuccess": "[<color=#12ffb8>The Florist</color>] Florist Guide Obtained. \nYou were charged {0}<color=#3e9c35>{1}</color> Happy foraging <color=#12ffb8>{2}</color>!", "InsufficientFunds": "[<color=#12ffb8>The Florist</color>] You don't have enough funds to purchase <color=#12ffb8>The Florist</color> Guide. \nIt costs <color=orange>{0}</color><color=green>{1}</color>.", "ItemObtained": "[<color=#12ffb8>The Florist</color>] You found a <color=green>{0}</color> swaying in the breeze." }
    $12.00
  9. Monster

    XStatistics

    Version 2.1.8

    274 downloads

    XStatistics - statistics for your server. - Optimization of the interface for different monitor resolutions. - Storing player data in - oxide/data/XDataSystem/XStatistics or MySQL or SQLite. - There is a lang ru/en/uk/es. - Sound effects when interacting with the menu. - UI settings in the configuration. - Display TOPs in game chat. - Ability to customize the privacy of the default statistics. - Ability to delete a player's stats after they have been banned. - Ability to customize grades of building blocks. [ To be recorded in statistics. ] - Ability to add a player to the blacklist. [ Player's statistics will not be displayed in the TOPs and will not be available to other players. ] - Ability to use MySQL or SQLite database. - Ability to automatically give awards and clear data after a WIPE. [ Settings in the configuration. ] [ Plugin economics or any other. Also [ RU ] GameStores. ] - A player can hide/open his statistics. [ Need permission. ] - A player can view the statistics of other players. [ Need permission. ] - A player can reset their statistics to zero. [ Need permission. ] - The player can view the entire list of players and search. [ Need permission. ] - Creating an unlimited number of categories, subcategories and pages. - Creating custom TOPs, coefficients and awards. [ Unlimited number. ] - Various admin commands to manage player statistics. - Support and compatibility with many plugins. - Server events (Bradley, Chinook, and Patrol Helicopter) count as stats for the player who did the most damage. - Checking OwnerID of Building blocks, Constructions and other entities. - Ability to create a Global TOP of your project. [ For this purpose it is enough to enter MySQL data and server name into the configuration.] [ This TOP can be disabled in the configuration and only the TOP players of the server can be used. Or you can use two TOPs at the same time! ] - Ability to use pages for categories with subcategories. - Administrator Mode. [ View hidden player stats, open player search and more ]. - Automatic deletion of statistics of players who have not logged connection the server for N days. - Ability for players to disable messages with the TOP players in chat. If your server is visited by more than 500 players, it is recommended to use SQLite or MySQL. Statistics were tested on a server with 120 online and 5000 players in the database. Excellent result on optimization. To display player avatars you need to customize the configuration of the ImageLibrary plugin! What are the statistics at this point? Global TOP data is manually deleted from the MySQL database. [ It is important that the servers are turned off so that online players data is not written to the database ]. Or after all servers are wiped, run the command - player_stats_reset globaldata null - on one of the servers. [ Also take into account the servers parameters, for a fair TOP they should be the same! ] Shortnames to customize statistics Permissions xstatistics.use - access to the statistics menu. xstatistics.top - access to the TOPs of subcategories. xstatistics.coefficients - access to view the coefficients. xstatistics.player - access to view player statistics, player list and player search. xstatistics.resetwipe - access to the ability for a player to reset his statistics - WIPE. xstatistics.resetall - access to the ability for a player to reset his statistics - ALL TIME. xstatistics.shstats - access to the ability to hide/open your statistics. [ If the permission has been revoked, the statistics privacy will automatically change to default. ] xstatistics.admin - access to admin mode. Commands /stat, /stats, /statistic, /statistics - to open the statistics menu. [ Commands can be changed in the config. ] Server console --- Admin commands. stats_ct <customTopName> - to see the top players. [ Custom TOP. ] stats_t <subcategoryName> - to see the top players. [ TOP subcategory. ] player_stats_reset statswipe <steamID> - to reset a player stats to zero - WIPE. player_stats_reset statsall <steamID> - to reset a player stats to zero - ALL TIME. player_stats_reset all <steamID> - to reset a player stats to zero - WIPE and ALL TIME. player_stats_reset global <steamID> - delete a player from the database Global TOP. [ Player must be offline! ] player_stats_reset globaldata null - Delete data from a table in a MySQL database - Global TOP. [ Use this command after all of your servers have been wiped. ] [ The command can be used on any of the Global TOP servers. ] player_actstats global true/false - change statistics privacy for all players. player_actstats <steamID> true/false - change statistics privacy for a player. stats_give_award - start giving out awards for TOPs. stats_clear_data_wipe - to clear all statistics - WIPE. [ Same as after a server wipe ] Config
    $45.99
  10. _senyaa

    Jet Ski

    Version 1.4.4

    863 downloads

    This plugin adds jet skis with customizable physics! Chat Commands /jetski - Spawns jet ski near player (requires jetski.spawn permission) /jetski remove - despawns player's jet ski (requires jetski.despawn permission) /buyjetski - allows player to buy jet ski item and deploy it later (requires jetski.buy permission) Console Commands givejetski <amount> <player name> - give specified amount of jet skis to specified player (can be run in the server console or by player with jetski.admin permission) Admin Chat Commands (requires jetski.admin permission) /jetski_debug - show buoyancy points Each buoyancy point has force and size parameters Permissions jetski.admin - admin permission jetski.spawn - allows players to spawn a jetski via /jetski jetski.buy - allows players to buy jet ski deployable via /buyjetski jetski.free - allows players to use /jetski for free (if price is not 0) jetski.despawn - allows players to despawn a jet ski via /jetski remove Localization English Russian Configuration Example of JetSki.json { "(1.1) Jet ski price (set value to 0 to make it free, use ServerRewards or Economics as a shortname to use RP points or Economics balance respectively)": { "ShortName": "scrap", "Amount": 75, "SkinID": 0 }, "(1.2) Spawn cooldown (in seconds)": 120, "(1.3) Allow only 1 jet ski per player": false, "(1.4) Allow spawning jet skis only on beaches": false, "(1.5) Amount of jet skis /buyjetski command gives": 1, "(1.6) Starting fuel": 0, "(2.1) Allow picking up the jet ski only in building privilege": false, "(2.2) How much HP is reduced when the jet ski is picked up (0-100)": 25.0, "(2.3) Jet ski item name": "Jet Ski", "(2.4) Jet ski item skin ID": 2935987835, "(2.5) Jet ski item ID": 794443127, "(3.1)Make all snowmobiles jet ski": true, "(3.2) Allow Jet ski to drive on land": true, "(4.1) Enable 'boost' button (Left Shift)": false, "(4.2) 'Boost' button thrust": 10000.0, "(4.3) 'Boost' duration (seconds)": 5.0, "(4.4) 'Boost' cooldown (seconds)": 30.0, "(5.1) Engine thrust": 5000, "(5.2) Engine thrust on land": 49, "(5.3) Move slowly on grass or roads": true, "(5.4) Steering scale": 0.05, "(5.5) Automatically flip jet skis": false, "(5.6) Off axis drag": 0.35, "(5.7) Buoyancy force": 730.0, "(6.1) Jet ski prefab": "assets/content/vehicles/snowmobiles/tomahasnowmobile.prefab", "(6.2) Thrust point position": { "x": -0.001150894, "y": 0.055, "z": -1.125 }, "(6.3) Buoyancy points": [ { "Position": { "x": -0.62, "y": 0.09, "z": -1.284 }, "Size": 1.3 }, ... } ] } API BaseEntity SpawnJetski(Vector3 position, Quaternion rotation) Item CreateJetskiItem()
    $16.99
  11. Version 0.1.1

    7 downloads

    Energize Interactions in Rust with Custom Messages! Unlock the potential of Rust's in-game chat with PlayerEventChatMessages-a plugin that elevates player interaction to an art form. Craft a vibrant community by enabling players to express themselves uniquely following in-game events, and in doing so, discreetly open up a new channel for economic opportunity on your server Key Features: Message Customization: Give your players the ability to purchase and select their chat messages to celebrate or announce specific actions. Flexible Monetization: Use the currency of your choice (Economics, Server Rewards, or your own plugin.) to enable players to acquire these distinctive messages. VIP Exclusivity: Control the ability to make certain messages exclusive to your VIP players, increasing the appeal for premium status. Configurable User Interface: A fully adaptable window, allowing you to change colors, size, and more, for a unique and personalized display. Integrated Localization: Tailor messages to the players' language, with a default configuration including forty messages already translated into English and French. Events Handled: Player Death Player Kill Player Connect Player Disconnect Dedicated Support: Rapid Assistance: Your seamless gaming experience is my priority. I'm readily available for support inquiries. Feel free to contact me on Codefling or join my Discord for swift and personalized assistance: https://discord.gg/CqNA32bzd3 Easy Configuration: Configuration File: 'Config/PlayerEventChatMessages.json' - Modify or add fields as needed. Message Management: The key defines the unique identifier of your message for translations. Accessibility: Enable or disable specific messages, making some inaccessible without completely deleting them. Triggering: Configure the sending time of messages according to the related event: "PlayerDead, PlayerKill, PlayerConnect, PlayerDisconnect". Message Customization: Language File: Lang/<language>/PlayerEventChatMessages.json - Associate the configuration ID with the desired message value. Dynamic Insertion: Use keywords such as `<owner_name>` and `<victim_name>` to integrate the players names into the messages. Adding Color: Beautify your messages with color tags for added visibility. Intuitive User Interface: With a multitude of customization options, create a user interface that perfectly matches the aesthetic of your server. Easy to configure and manage, our interface ensures a seamless integration with the game. Command & Control: - Commands: Set the stage for interaction with a customizable command for opening the chat window, defaulting to '/pevent'. - Permissions: Manage how players interact with the economy and the plugin with granular permissions: PlayerEventChatMessages.VIP for VIP content PlayerEventChatMessages.Default for standard plugin access PlayerEventChatMessages.UnlimitedCooldown for cooldown-free message usage Json Example : { "(By player) Message Cooldown for any types (seconds)": 1800.0, "(By player) Message Cooldown for each types (seconds)": 5.0, "Commands for show UI": [ "pevent_show", "pevent" ], "Money": { "Money Plugin Type ('Economics' | 'ServerRewards' | 'Custom')": "Economics", "(Custom) Plugin Name": "", "(Custom) Plugin Hook => int/double/float Hook(string id)": "", "(Custom) Plugin Hook => bool Hook(string id, int val)": "" }, "UI": { "Rects": { "Window Rect": { "X Size Min": -250.0, "Y Size Min": -210.0, "X Size Max": 250.0, "Y Size Max": 210.0, "Position X": 0.5, "Position Y": 0.5, "Width": 500.0, "Height": 420.0 }, "Top Rect": { "X Size Min": 0.0, "Y Size Min": -25.0, "X Size Max": 500.0, "Y Size Max": 0.0, "Position X": 0.0, "Position Y": 1.0, "Width": 500.0, "Height": 25.0 }, "Close Rect": { "X Size Min": -25.0, "Y Size Min": -25.0, "X Size Max": 0.0, "Y Size Max": 0.0, "Position X": 1.0, "Position Y": 1.0, "Width": 25.0, "Height": 25.0 }, "Categories Rect": { "X Size Min": 0.0, "Y Size Min": 0.0, "X Size Max": 75.0, "Y Size Max": 395.0, "Position X": 0.0, "Position Y": 0.0, "Width": 75.0, "Height": 395.0 }, "Content Rect": { "X Size Min": 80.0, "Y Size Min": 0.0, "X Size Max": 485.0, "Y Size Max": 385.0, "Position X": 0.0, "Position Y": 0.0, "Width": 405.0, "Height": 385.0 } }, "Title": { "Title Font Size": 12, "Title Font Color": "1 1 1 1", "Title Font": "robotocondensed-bold.ttf" }, "Money Top": { "Money Icon Ratio": 0.8, "Money Text Size": 10 }, "Categories": { "Category Height": 25.0, "Category Width": 75.0, "Category Font Size": 12, "Is Vertical": true }, "Icons": { "Money Icon Url": "https://i.postimg.cc/wy9FkWx3/icons8-cher-2-48.png", "New Icon Url": "https://i.postimg.cc/Yqgy13FV/icons8-nouveau-48.png", "Vip Icon Url": "https://i.postimg.cc/ft5CqxkC/icons8-vip-48.png" }, "Messages": { "Message Item Height": 30.0, "Max Message Per Line": 5.0, "Message Margin Height": 5.0, "Message Margin Width": 5.0, "Message Font Size": 12, "Icon Ratio (VIP, New, Money)": 0.8 }, "Theme": { "Colors": { "Surface": "0.133 0.133 0.133 1", "Background": "0.094 0.094 0.094 1", "TextPrimary": "1 1 1 1", "TextOnSelected": "1 1 1 1", "Primary": "1 1 1 1", "Selected": "0.77 0.26 0.171 1", "CloseButton": "0.8 0 0 1" } } }, "Messages (go to lang directory for values)": { "1": { "Enabled": true, "Trigger Type ('PlayerDead' | 'PlayerKill' | 'PlayerConnect' | 'PlayerDisconnect')":"PlayerDead", "Obtention": { "Price (0 => free)":150 } }, "2": { "Enabled": true, "Trigger Type ('PlayerDead' | 'PlayerKill' | 'PlayerConnect' | 'PlayerDisconnect')":"PlayerConnect", "Obtention": { "Price (0 => free)":150 } }, "3": { "Enabled": true, "Trigger Type ('PlayerDead' | 'PlayerKill' | 'PlayerConnect' | 'PlayerDisconnect')":"PlayerKill", "Obtention": { "Price (0 => free)":150 } } } }
    $8.99
  12. Version 1.1.1

    100 downloads

    Put in sale properties (house, building, etc) so that players can buy them, rented. Work with all doors that can include a lock code, Works with Economics Permissions propertybuying.manager.use - Gives access to the (creates, suprimed ) properties propertybuying.manager.admin - See all properties created and (creates , suprimed ) properties Commands /property - Accesses the property management ( added, removed ) How to add a property ? CopyPaste Decay Config Payment Time Model Lang
    $19.99
  13. MON@H

    Life Support

    Version 2.3.1

    26 downloads

    Tired of dying from "bots-cheaters" shots? Can't handle Bradley / Heli? Use life support to stay alive! If enabled and player has needed amount of currency - life support will heal player to maximum health instead of being dead. The most valuable thing is you keep your items and don't need to go and find your dead body. Also it can be very handy in the battle with very hard opponents (like bot-boss, Higher tier Bradley/Heli etc.) This plugin supports both Economics and ServerRewards plugins. You may set initial price for both of them or just any you like. If both prices are set - plugin will try to use RP's first and if there will be not enough - it will check for Coins. When creating permissions you will use coefficient of the initial price so both currencies could work properly. For example, if you set the initial price for 1000 RP and 100 Coins and create 2 permissions VIP - 0.5 and Elite 0.25 and give them both to player, plugin will try to withdraw 250 RP and if there will be not enough RP it will try to withdraw 25 Coins. You can set the price = 0 to both initial prices and it will allow everyone with just basic permission to use it for free, or you can create as many permission - cost-coefficient pairs as you want and give them to different players/groups. After you set everything up in your config file and give all permissions to all players/groups plugin will track for changes automatically, so if some player will be added to VIP for example or upgraded to Elite plugin will apply changes automatically without need to reload plugin. If you will edit config file you still will need to reload plugin. By default, life support is allowed on the entire map. If you want to restrict the use of life support, you must enable the desired options in the config file. Using cupboard so as ZoneManager zones are supported in 2 different modes: Include mode will only allow players to use life support inside specific zones/cupboard range. Exclude mode will prevent players from using life support inside specific zones/cupboard range. When cupboard range is checked, team / friend / clan members are checked automatically if enabled in config file and the required plugin is installed. It means members of team / friend / clan cupboard = players cupboard. This is handy if you want to strict players to use life support only inside cupboard range or you want to allow use it everywhere except cupboard owned by other players. ## Permissions lifesupport.use -- Allows player to use plugin (NOTHING will work without this one) lifesupport.blocked -- Prevents player from using plugin (Has the highest priority among other permissions) lifesupport.free -- Allows player to use plugin without need to pay cost (regardless of any costs permissions granted) More permissions with costs are created in config file (see Configuration section below) ## Commands This plugin provides both chat and console commands using the same syntax. When using a command in chat, prefix it with a forward slash: `/` /ls | /lifesupport - Toggle using of life support ## Configuration Add as many permissions as you want. For cases when the player has more than one, permission with lower cost will be chosen Enable / disable notifications / logging Set SteamIDIcon steamid to set desired account icon in chat messages Set commands list (default are "ls", "lifesupport") Enable / disable modes/plugins support ## Localization Plugins phrases are available on 2 languages out of the box: English and Russian { "Error.NoPermission": "You do not have permission to use this command!", "Format.Coins": "Coins", "Format.Disabled": "<color=#B22222>Disabled</color>", "Format.Enabled": "<color=#228B22>Enabled</color>", "Format.Free": "free", "Format.Prefix": "<color=#00FF00>[LifeSupport]</color>: ", "Format.RP": "RP", "Info.LifeSaved": "Your life saved. Cost = <color=#FFA500>{0} {1}</color>", "Info.LifeSupport": "LifeSupport is now {0}" } ## API ### Developer Hooks CanUseLifeSupport Called when a player is about to die (or get into wounded state if enabled in options). Returning a non-null value (true is default) will prevent life support activation object CanUseLifeSupport(BasePlayer player) Example of hook usage to prevent player from life saving private object CanUseLifeSupport(BasePlayer player) { if (playerList.ContainsKey(player.userID)) { return true; } return null; } There is a free version on uMod, why do you even need this plugin? First of all, this plugin was designed to be efficient and performant. It uses unique caching system that should not consume no additional server resources Much more options and plugins native support Any plugin support will be added if requested
    $15.00
  14. MON@H

    PunishAttacker

    Version 1.8.0

    106 downloads

    Tired of someone shooting into your players face on your PVE server? While it deal no damage it may lead to fps loss and be really annoying. This plugin will help you to punish them. The main idea of the plugin is to punish a player attacking another. There is variety of options in config file. First of all, remember, after you will configurate this plugin you will need to allow damage from player to player (PVP mode) in your PVE plugin like TruePVE, NextGenPVE etc. This is needed to being able to identify and get amount of damage which one player made to another. This plugin will prevent the damage, so there is nothing to worry about. But keep in mind that from now on, PVP damage is handled by this plugin. So if you decided to unload this plugin, before you do - don't forget to block player to player damage in your PVE plugin. Next, you need to decide what exactly you want to do with attackers to punish them. Plugin will count every hit attacker made to another player. More hits - heavier punishment, because hits counter serves as multiplier. There are 3 thresholds by number of hits attacker made: The number of hits allowed without punishment The number of hits before death is used as a punishment The number of hits before kick is used as a punishment Start with setting a number of hits you may allow do deal without punishment. Notifications to stop attacking players still appear if enabled in the settings. Then set initial percentage of damage that attacker will get back. For example, by default it set to 0.5, so if attacker hits another player and dealt 30 hp damage he will get 50% back = -15 hp. Additionally ServerRewards RP will be discounted (if enabled in config) by formula: Initial server reward RP amount * The number of hits attacker made. After reaching death as punishment threshold punishment include death. After reaching kick as punishment threshold punishment include kick (if enabled in config) and additionally ZLevelsRemastered levels skills amount may also be taken (if enabled in config). There are 2 ways to inflict damage on an attacker - using the slap plugin (if activated in config and loaded) or simply by taking away health. Here is an example of how this plugin works with default thresholds values (5, 10, 15) and Initial percentage damage (0.5) with 50 hp damage dealt by each shot. So by default, first threshold is 5 hits without punishment. Every hit attacker made he gets notification to stop attacking players. If player will continue hitting another player and reach first threshold 5 hits, on 6th hit he will get punishment: -25 hp (-50 hp, -75 hp and so on) and -100 RP (-200 RP, -300 RP and so on). If player will continue hitting another player and reach second threshold 10 hits, on 10th hit and every hit afterwards he will get punishment: death. If player will continue hitting another player and reach third threshold 15 hits, on 15th hit and every hit afterwards he will get punishment: kick and -10 levels skills in ZLevelsRemastered. You may also change time (5 minutes default) after which hits number will be cleared and count will start from scratch. Zone Manager support. If ZoneManager include mode is set to true, only attackers in specified zones will be punished. If set to false, only attackers outside specified zones will be punished. As a bonus, this plugin may help to solve several other problems: Protect personal growables from being damaged by other players Protect personal vehicles from being damaged by other players Prevent any fireball damage There is a problem with fireball damage in rust - you can't detect the author of this type of damage. So there is no way to know whose fireball is attacking target. This type of damage is dealt only by incendiary bullets. So to prevent players from abusing this you may want to disable incendiary bullets damage entirely. ## Permissions punishattacker.use -- give player/group this permission to activate punishment system for them punishattacker.immunity -- allows player to be ignored by punishment system ## Commands This plugin provides no commands ## Configuration Enable / disable notifications / logging Set SteamIDIcon steamid to set desired account icon in chat messages Enable / disable modes/plugins support ## Localization Plugins phrases are available on 2 languages out of the box: English and Russian { "Format.Prefix": "<color=#00FF00>[PunishAttacker]</color>: ", "Punishment.Damage": "Attacking other player punishment damage: <color=#FFA500>{0}</color>", "Punishment.Kick": "Kicked for continuously attacking other player", "Punishment.Kill": "<color=#FFA500>{0}</color> was attacking <color=#FFA500>{1}</color> and was punished", "Warning.First": "Stop attacking players or you will be punished!", "Warning.Second": "Stop attacking players or you will be killed!", "Warning.Third": "Stop attacking players or you will be kicked!" } Log file example: punishattacker_punishments-2021-07-16.txt
    $15.00
  15. Version 1.0.2

    50 downloads

    Enhance your gaming experience with our Buy Daylight plugin, offering players the ability to purchase personalized daytime hours while others remain in nighttime mode. Ideal for both PvE and PvP servers, this plugin can be easily integrated and configured for VIP access with permissions. Make your gameplay more engaging and enjoyable with this unique addition. Features Personalized daytime experience VIP access through permissions Compatible with Economic plugin for in-game purchases Suitable for PvE and PvP servers Permissions (if enabled) buydaylight.use Config example { "EconomicsPrice": 100.0, // The price for purchasing daylight in in-game currency "SteamIDIcon": "76561197970799340", // Steam ID for the chat icon displayed when using the plugin "UseEconomics": true, // Enables (true) or disables (false) the Economic plugin for in-game purchases "UseServerRewards": false, // Enables (true) or disables (false) the Server Rewards plugin for in-game purchases "UsePermissions": false, // Enables (true) or disables (false) the use of permissions for VIP access "ServerRewardsPrice": 10, // The price for purchasing daylight in in-game currency using Server Rewards "CurrencyName": "RP" // Text displayed for currency name } Available Commands /day - Shows plugin-related information for the user /day buy - Allows the user to purchase daylight lasting until 9 AM Upgrade your server today with the Buy Daylight plugin and offer players a unique and personalized gameplay experience.
    $9.50
  16. CASHR

    LuckyClick

    Version 1.0.2

    41 downloads

    LuckyClick is an amazing plugin that allows your players to participate in the lottery every day, thereby they will be able to increase their game balance. - Display of the latest winners - Easy to install - Easy to set up - Optimized plugin - The plugin is compatible with: 1) Economy, 2) Bank of System, 3) ServerReward -Tthe ability to change the interface text to suit your language. (Lang file) Plugin Config { "Image settings": [ { "Name": "COIN", "Path": "LuckyClick/Images/coin.png" } ], "A chance to win": 30, "Rate multiplication factor": 2.0, "Number of attempts per day": { "luckyclick.default": 600, "luckyclick.vip": 15, "luckyclick.elite": 20 }, "Minimum bid": 10.0, "Maximum bid": 100.0, "Use Economics?": false, "Use ServerReward?": false, "Use BankSystem?": true, "Name of the currency to display in the table": "RC", "Use effects when winning/losing?": true }
    $15.00
  17. Version 1.4.1

    38 downloads

    This plugin gives the possibility to trigger a timed events or an event between two server restart. The event will choose randomly a weapon category. During the event, after the minimum category distance was achieved, the player will be on the leader board. The less attachment the weapon has, the players can earn extra percent points, what is count in the end, when the rewards are given. For example, if the first place worth 50 and the reward type is a Small Halloween Bag, and the player had no attachment on the weapon what he used, then he got a 100% extra point, what will double the price and he will get 100 Small Halloween Bag. Each additional attachment deduct ~33%. So for example, if the player has a Flashlight, a Scope and a Silencer, he will get 0% extra point in the end. (With the attachment-less weapon, automatically 100% bonus given) If the Players not gain points, they will be not listed on the Scoreboard. Rewards can be claimed after the event(s) are over. First event will start after 5 min as soon as the plugin loaded in. The plugin have several protection against wrong configuration. If no weapon category is enabled, no event will started and message will be written to the server console. If no reward or invalid reward number set in the configuration, list of rewards will be cleared, 0 and 1 will be added as default (see the meaning below). If ServerRewards plugin not installed, this type of reward will be not selected. Configuration Default configuration: { "minimum_hour_before_reset": 12, "event_duration_in_hour": 6, "event_reward_type": "0, 1, 2", "event_top1_reward": 50, "event_top2_reward": 40, "event_top3_reward": 30, "rp_reward_multiplier": 10, "economics_reward_multiplier" : 10.0, "additional_winners_reward": 15, "max_winners": 10, "event_based_challenge": false, "reminder_enabled": true, "reminder_time_in_minute": 30, "disable_pvp" = false, "event_based_delay" = 0, "first_event_delay_in_min" = 5, "enable_extra_point_feature" = true, "SC_UIPanel_Color": "0.39 0.39 0.39 0.8", "SC_Player_Color": "0.76 0.90 0.29 1", "SC_Description_Color": "0.76 0.90 0.29 1", "SC_Description_Color_Img": "0.39 0.39 0.39 0.9", "SC_Distance_Color": "0.76 0.90 0.29 1", "SC_Weapon_Color": "0.76 0.90 0.29 1", "SC_Extra_point_Color": "0.76 0.90 0.29 1", "SC_Title_Color": "0.76 0.90 0.29 1", "SC_CloseButton_Color": "0.5 0.5 0.5 1", "SC_Close_Color": "0.76 0.90 0.29 1", "rifle_weapon_cat": [ "lr300.entity", "l96.entity", "m39.entity", "semi_auto_rifle.entity", "ak47u.entity", "bolt_rifle.entity" ], "rifle_weapon_cat_enabled": true, "rifle_weapon_cat_min_dist": 100.0, "smg_weapon_cat": [ "smg.entity", "thompson.entity", "mp5.entity", "m249.entity" ], "smg_weapon_cat_enabled": true, "smg_weapon_cat_min_dist": 100.0, "shotgun_weapon_cat": [ "double_shotgun.entity", "shotgun_waterpipe.entity", "shotgun_pump.entity", "spas12.entity" ], "shotgun_weapon_cat_enabled": true, "shotgun_weapon_cat_min_dist": 100.0, "pistol_weapon_cat": [ "pistol_eoka.entity", "m92.entity", "python.entity", "pistol_revolver.entity", "nailgun.entity", "pistol_semiauto.entity" ], "pistol_weapon_cat_enabled": true, "pistol_weapon_cat_min_dist": 100.0, "bow_weapon_cat": [ "bow_hunting.entity", "compound_bow.entity", "crossbow.entity" ], "bow_weapon_cat_enabled": true, "bow_weapon_cat_min_dist": 50.0, } Definition of configurations: event_based_challenge - If it is set to false, then a server start to server restart long event will be active, and "minimum_hour_before_reset" hour need to be between the two to give reward to the players (it is for avoid too many reward in case of often server restarts) minimum_hour_before_reset - If "event_based_challenge" is set to false, then a server start to server restart long event will be active, and "minimum_hour_before_reset" hour need to be between the two to give reward to the players (it is for avoid too many reward in case of often server restarts) event_duration_in_hour - If event_based_challenge set to true, then the given hour long events will be started, and as soon as the event is over, the next X hour long will started event_reward_type - 0 - (Bronze Easter Egg - item ID: 844440409) 1 - ( Small Halloween Bag item ID: 1319617282) 2 - RP from [ServerRewards plugin if installed, if not, it can not be choosen even if in the list](https://umod.org/plugins/server-rewards) 3 - Economics point from Economics plugin [if installed, if not, it can not be choosen even if in the list](https://umod.org/plugins/economics) max_winners - maximum number of rewarded player, after the first 3 place, the additional_winners_reward amount will be given event_top1_reward - Amount of choosen item/RP(base for a the rp_reward_multiplier below) for the first place event_top2_reward - Amount of choosen item/RP(base for a the rp_reward_multiplier below) for the second place event_top3_reward - Amount of choosen item/RP(base for a the rp_reward_multiplier below) for the third place additional_winners_reward - - Amount of choosen item/RP(base for a the rp_reward_multiplier below) for the rest of the place until maximum winner is reached rp_reward_multiplier - ServerRewards multiplier for the RP reward, if the event is generated to give RP as a reward economics_reward_multiplier - Economics multiplier for the Economics reward, if the event is generated to give Economics point as a reward reminder_enabled - enable/disable the repeated reminder to the players with unclaimed reward reminder_time_in_minute - reminder time in minute format enable_extra_point_feature - Disable the extra point feature event_based_delay - If the event based configuration is set, it can be now configured, what time shall be between two event (By default as soon as the event is over a new immediately start) first_event_delay_in_min - customize when the first event after server start to start instead of the originally introduced 5 min disable_pvp - disable player kills (to avoid bypass and exploit long kills with other friendly players, also added Friends, Clan and team support to discard the friendly fire even if the pvp enabled) ****_weapon_cat - different weapon categories, the listed weapons will be considered as an allowed weapons for the selected challenge ****_weapon_cat_enabled - if it is set to true, the category can selected as challenge ****_weapon_cat_min_dist - minimum distance for the kill with the selected category weapons to earn place Colors: the first 3 number is the corresponding RGB color number, but between 0-1 with float numbers. So if you want to write an RGB, where the RED is 210, then the first number in the config will be 210/255=0.82. The last number is the opacity 0 is invisible, 1 the maximum Commands /sc - Show information about Sniper Challenges /sc info - Show information about Sniper Challenges /cch show - Show currently Active Challenge Scoreboard /cch claim - Claim rewards after event(s) Localization English language file generated by default, texts supported by the language files. Logging Reported winner and claimed rewards stored in the oxide/logs folder.
    $15.00
  18. Billy Joe

    Custom Hud

    Version 1.0.8

    87 downloads

    Custom HUD is a dynamic Rust plugin designed to overlay and enhance the standard Rust user interface, providing server owners with exceptional customization capabilities. With an extensive range of configuration options, this plugin takes your server’s UI to the next level, even supporting data display from other plugins, such as player balances from the Economics Plugin. Transform your Rust server’s UI and improve player engagement with Custom HUD. Key Features: Comprehensive configuration options for the ultimate customization experience Seamless integration with other plugins, like the Economics Plugin User-friendly setup for server owners Upcoming Features: Additional HUD layouts for even greater variety Potential HUD selection options for individual players Arguments Section: $playerid: Inserts the player’s unique ID as a ulong $playername: Inserts the player’s display name as a string Config { "Which HUD to Display?": 1, "Custom HUD Attributes": { "Option 1": { "Use Custom Icon?": false, "Icon": "assets/icons/health.png", "Icon Color": "#FFF", "Icon Background Color": "#2B2926", "Progress Bar Color": "#3D4B27", "Progress Bar Text Color": "#A6CD63", "Progress Bar Text Font Size": 13, "Progress Bar Background Color": "#2B2926", "Option Type (Health, Thirst, Hunger, Custom)": "Health", "Option Max Value (0 = disabled)": 100.0, "Custom Attribute": { "Plugin Name": "", "Function": "", "Arguments": [], "Return Type (string, int, double, float)": "", "Money Value? (Add dollar sign)": false, "Need Commas? (Adds commas for numbers)": false } }, "Option 2": { "Use Custom Icon?": false, "Icon": "assets/icons/cup_water.png", "Icon Color": "#FFF", "Icon Background Color": "#2B2926", "Progress Bar Color": "#1D425F", "Progress Bar Text Color": "#489AD4", "Progress Bar Text Font Size": 13, "Progress Bar Background Color": "#2B2926", "Option Type (Health, Thirst, Hunger, Custom)": "Thirst", "Option Max Value (0 = disabled)": 250.0, "Custom Attribute": { "Plugin Name": "", "Function": "", "Arguments": [], "Return Type (string, int, double, float)": "", "Money Value? (Add dollar sign)": false, "Need Commas? (Adds commas for numbers)": false } }, "Option 3": { "Use Custom Icon?": false, "Icon": "assets/icons/meat.png", "Icon Color": "#FFF", "Icon Background Color": "#2B2926", "Progress Bar Color": "#4319c2", "Progress Bar Text Color": "#7b51fc", "Progress Bar Text Font Size": 13, "Progress Bar Background Color": "#2B2926", "Option Type (Health, Thirst, Hunger, Custom)": "Hunger", "Option Max Value (0 = disabled)": 500.0, "Custom Attribute": { "Plugin Name": "", "Function": "", "Arguments": [], "Return Type (string, int, double, float)": "", "Money Value? (Add dollar sign)": false, "Need Commas? (Adds commas for numbers)": false } } } } Optimize your Rust server’s UI with Custom HUD, providing a superior experience for both server owners and players alike. Boost your topical authority and SEO ranking by leveraging the power of this innovative and highly customizable plugin.
    $4.99
  19. Version 1.0.1

    170 downloads

    Only available on RCON or server console due to abuse protection. Features: Avoid duplicate purchases mrefund user playerid permission amount rp ex) mrefund user $player.id backpacks.use 5000 eco ex2) mrefund user $player.id backpacks.use 5000 rp ex3) mrefund group $player.id admin 5000 rp has permission 5000 eco refund Example Server Rewards) "Backpack": { "description": "Buy Backpack", "iconName": "", "commands": [ "mrefund user $player.id backpacks.use 500 rp" ], "displayName": null, "cost": 500, "cooldown": 5 }, Config: { "Prefix": "<color=#00ffff>[ Money Refund ] - </color>\n", "SteamID": 0, "Version": { "Major": 1, "Minor": 0, "Patch": 0 } } Lang: { "HasPerm": "<color=red>You already have this permission</color> <color=yellow>I got {0} {1} back</color>", "HasGroup": "<color=red>You already have this group</color> <color=yellow>I got {0} {1} back</color>" "RP": "<color=lime>RP</color>", "ECO": "<color=lime>ECO</color>" }
    Free
  20. Mals

    DeathPenalty

    Version 2.0.2

    513 downloads

    Penalise players if they die. Supports Server Rewards, Economics or scrap. Stops taking once the player has zero or less balance to avoid griefing new players. Uses permission to determine if a player will be penalised: death_penalty.active There is a new flag to toggle behaviour of the permission: Penalty on active or inactive If set to active and the player had the permission, they get penalised. If it is set to inactive, and they have the permission, they do not get penalised. If set to active, and they do not have the permission, they do not get penalised. If set to inactive, and they do not have the permission, they get penalised. Here is a quick chart that hopefully makes this clearer: Default Config: { "Penalty Type (amount or percent)": "amount", "Penalty Amount": -100.0, "Use Economics": false, "Use ServerRewards": false, "Use Scrap": true, "Maximum Amount": 1000.0, "Penalty on active or inactive": "active" }
    Free
  21. Hello, Can someone make a couple of changes in one basic plugin? Please reply if you can, I can tip of course After installing the plugin and running it on the server, not a single row with the player was created in the database. And also, when entering the command, the deposit displays a message that 100 has been accrued, even if I enter deposit 1000 And also when viewing the balance of the player displays 100 credits /***********************************************************************************************************************/ /*** DO NOT edit this file! Edit the files under `oxide/config` and/or `oxide/lang`, created once plugin has loaded. ***/ /*** Please note, support cannot be provided if the plugin has been modified. Please use a fresh copy if modified. ***/ /***********************************************************************************************************************/ //#define DEBUG using System; using System.Collections.Generic; using System.Data.SQLite; using System.IO; using System.Linq; using MySql.Data.MySqlClient; using Newtonsoft.Json; using Oxide.Core; using Oxide.Core.Configuration; using Oxide.Core.Libraries.Covalence; namespace Oxide.Plugins { [Info("Economics", "Wulf", "4.0.0")] [Description("Basic economics system and economy API")] public class Economics : CovalencePlugin { #region Configuration private Configuration _config; public class MySqlConfig { public string Server = "localhost"; public string Username = "root"; public string Password = ""; public string Database = "economics"; } public class Configuration { [JsonProperty("Balance limit for accounts (0.0 to disable)")] public double BalanceLimit = 0.0; [JsonProperty("Balance limit for accounts (0 to disable)")] private int BalanceLimitOld { set { BalanceLimit = Convert.ToDouble(value); } } // TODO: From version 3.9.1; remove eventually [JsonProperty("Negative balance limit for accounts (0.0 to disable)")] public double NegativeBalanceLimit; [JsonProperty("Negative balance limit for accounts (0 to disable)")] public int NegativeBalanceLimitOld { set { NegativeBalanceLimit = Convert.ToDouble(value); } } // TODO: From version 3.9.1; remove eventually [JsonProperty("Remove unused accounts")] public bool RemoveUnused = true; [JsonProperty("Log transactions to file")] public bool LogTransactions = false; [JsonProperty("Starting account balance (0.0 or higher)")] public double StartingBalance = 1000.0; [JsonProperty("Starting account balance (0 or higher)")] private int StartingBalanceOld { set { StartingBalance = Convert.ToDouble(value); } } // TODO: From version 3.9.1; remove eventually [JsonProperty("Wipe balances on new save file")] public bool WipeOnNewSave = false; [JsonProperty("Store data in SQLite instead of data files")] public bool UseSqLite = false; [JsonProperty("Store data in MySQL instead of data files")] public bool UseMySql = false; [JsonProperty("MySQL configuration, if using MySQL")] public MySqlConfig MySql = new MySqlConfig(); public string ToJson() => JsonConvert.SerializeObject(this); public Dictionary<string, object> ToDictionary() => JsonConvert.DeserializeObject<Dictionary<string, object>>(ToJson()); } protected override void LoadDefaultConfig() => _config = new Configuration(); protected override void LoadConfig() { base.LoadConfig(); try { _config = Config.ReadObject<Configuration>(); if (_config == null) { throw new JsonException(); } if (!_config.ToDictionary().Keys.SequenceEqual(Config.ToDictionary(x => x.Key, x => x.Value).Keys)) { LogWarning("Configuration appears to be outdated; updating and saving"); SaveConfig(); } } catch { LogWarning($"Configuration file {Name}.json is invalid; using defaults"); LoadDefaultConfig(); } } protected override void SaveConfig() { LogWarning($"Configuration changes saved to {Interface.Oxide.ConfigDirectory}{Path.DirectorySeparatorChar}{Name}.json"); Config.WriteObject(_config, true); } #endregion Configuration #region Stored Data private DynamicConfigFile _oldStoredData; private KeyValuePair<double, double> _balanceLimits; private MySqlConnection _mysqlConnection; private SQLiteConnection _sqlConnection; private StoredData _storedData; private bool _changed; private string _connectionStr; private class StoredData { public readonly Dictionary<string, double> Balances = new Dictionary<string, double>(); } private void SaveData() { if (_changed) { Log("Saving balances for players..."); Interface.Oxide.DataFileSystem.WriteObject(Name, _storedData); // TODO: Try/catch potential IOException _changed = false; } } private void OnServerSave() => SaveData(); private void Unload() => SaveData(); #endregion Stored Data #region Localization protected override void LoadDefaultMessages() { lang.RegisterMessages(new Dictionary<string, string> { ["CommandBalance"] = "balance", ["CommandDeposit"] = "deposit", ["CommandSetBalance"] = "SetBalance", ["CommandTransfer"] = "transfer", ["CommandWithdraw"] = "withdraw", ["CommandWipe"] = "ecowipe", ["DataSaved"] = "Economics data saved!", ["DataWiped"] = "Economics data wiped!", ["DepositedToAll"] = "Deposited {0:C} total ({1:C} each) to {2} player(s)", ["LogDeposit"] = "{0:C} deposited to {1}", ["LogSetBalance"] = "{0:C} set as balance for {1}", ["LogTransfer"] = "{0:C} transferred to {1} from {2}", ["LogWithdrawl"] = "{0:C} withdrawn from {1}", ["NegativeBalance"] = "Balance can not be negative!", ["NotAllowed"] = "You are not allowed to use the '{0}' command", ["NoPlayersFound"] = "No players found with name or ID '{0}'", ["PlayerBalance"] = "Balance for {0}: {1:C}", ["PlayerLacksMoney"] = "'{0}' does not have enough money!", ["PlayersFound"] = "Multiple players were found, please specify: {0}", ["ReceivedFrom"] = "You have received {0} from {1}", ["SetBalanceForAll"] = "Balance set to {0:C} for {1} player(s)", ["TransactionFailed"] = "Transaction failed! Make sure amount is above 0", ["TransferredTo"] = "{0} transferred to {1}", ["TransferredToAll"] = "Transferred {0:C} total ({1:C} each) to {2} player(s)", ["TransferToSelf"] = "You can not transfer money yourself!", ["UsageBalance"] = "{0} - check your balance", ["UsageBalanceOthers"] = "{0} <player name or id> - check balance of a player", ["UsageDeposit"] = "{0} <player name or id> <amount> - deposit amount to player", ["UsageSetBalance"] = "Usage: {0} <player name or id> <amount> - set balance for player", ["UsageTransfer"] = "Usage: {0} <player name or id> <amount> - transfer money to player", ["UsageWithdraw"] = "Usage: {0} <player name or id> <amount> - withdraw money from player", ["UsageWipe"] = "Usage: {0} - wipe all economics data", ["YouLackMoney"] = "You do not have enough money!", ["YouLostMoney"] = "You lost: {0:C}", ["YouReceivedMoney"] = "You received: {0:C}", ["YourBalance"] = "Your balance is: {0:C}", ["WithdrawnForAll"] = "Withdrew {0:C} total ({1:C} each) from {2} player(s)", ["ZeroAmount"] = "Amount cannot be zero" }, this); } #endregion Localization #region Initialization private const string PermissionBalance = "economics.balance"; private const string PermissionDeposit = "economics.deposit"; private const string PermissionDepositAll = "economics.depositall"; private const string PermissionSetBalance = "economics.setbalance"; private const string PermissionSetBalanceAll = "economics.setbalanceall"; private const string PermissionTransfer = "economics.transfer"; private const string PermissionTransferAll = "economics.transferall"; private const string PermissionWithdraw = "economics.withdraw"; private const string PermissionWithdrawAll = "economics.withdrawall"; private const string PermissionWipe = "economics.wipe"; private void Init() { // Register universal chat/console commands AddLocalizedCommand(nameof(CommandBalance)); AddLocalizedCommand(nameof(CommandDeposit)); AddLocalizedCommand(nameof(CommandSetBalance)); AddLocalizedCommand(nameof(CommandTransfer)); AddLocalizedCommand(nameof(CommandWithdraw)); AddLocalizedCommand(nameof(CommandWipe)); // Register permissions for commands permission.RegisterPermission(PermissionBalance, this); permission.RegisterPermission(PermissionDeposit, this); permission.RegisterPermission(PermissionDepositAll, this); permission.RegisterPermission(PermissionSetBalance, this); permission.RegisterPermission(PermissionSetBalanceAll, this); permission.RegisterPermission(PermissionTransfer, this); permission.RegisterPermission(PermissionTransferAll, this); permission.RegisterPermission(PermissionWithdraw, this); permission.RegisterPermission(PermissionWithdrawAll, this); permission.RegisterPermission(PermissionWipe, this); if (_config.UseSqLite && _config.UseMySql) { LogWarning("Both SQLite and MySQL databases are enabled; defaulting to SQLite for data storage"); } if (_config.UseMySql || _config.UseSqLite) { Unsubscribe(nameof(OnServerSave)); Unsubscribe(nameof(Unload)); } bool emptyDatabase = true; if (_config.UseSqLite) { _connectionStr = $"Data Source={Interface.Oxide.DataDirectory}{Path.DirectorySeparatorChar}{Name}.db;"; _sqlConnection = new SQLiteConnection(_connectionStr); _sqlConnection.Open(); emptyDatabase = CheckDatabase(); } else if (_config.UseMySql) { _connectionStr = $"server={_config.MySql.Server};uid={_config.MySql.Username};pwd={_config.MySql.Password};database={_config.MySql.Database};"; _mysqlConnection = new MySqlConnection(_connectionStr); _mysqlConnection.Open(); emptyDatabase = CheckDatabase(); } if ((!_config.UseMySql && !_config.UseSqLite)) { // Load existing data and migrate old data format _oldStoredData = Interface.Oxide.DataFileSystem.GetFile(Name); try { Dictionary<ulong, double> temp = _oldStoredData.ReadObject<Dictionary<ulong, double>>(); try { _storedData = new StoredData(); foreach (KeyValuePair<ulong, double> old in temp) { if (!_storedData.Balances.ContainsKey(old.Key.ToString())) { _storedData.Balances.Add(old.Key.ToString(), old.Value); } } _changed = true; } catch { // Ignore } } catch { _storedData = _oldStoredData.ReadObject<StoredData>(); _changed = true; } List<string> playerData = new List<string>(_storedData.Balances.Keys); // Check for and set any balances over maximum allowed if (_config.BalanceLimit > 0) { foreach (string playerId in playerData) { if (_storedData.Balances[playerId] > _config.BalanceLimit) { _storedData.Balances[playerId] = _config.BalanceLimit; _changed = true; } } } // Check for and remove any inactive player balance data if (_config.RemoveUnused) { foreach (string playerId in playerData) { if (_storedData.Balances[playerId].Equals(_config.StartingBalance)) { _storedData.Balances.Remove(playerId); _changed = true; } } } } if (_config.UseSqLite) { if (emptyDatabase) { // Migrate/import the data file, if present foreach (KeyValuePair<string, double> playerData in _storedData.Balances) { using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); string query = $"INSERT INTO balances VALUES ('{playerData.Key}', {playerData.Value})"; using (SQLiteCommand sqlCommand = new SQLiteCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } } } } else if (_config.RemoveUnused) { Log("Reading data from SQLite database..."); // Read the storedData from SQLite _storedData = new StoredData(); using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); using (SQLiteCommand sqlCommand = new SQLiteCommand("SELECT DISTINCT playerid, value FROM balances", connection)) using (SQLiteDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { string playerId = reader.GetString(0); double balance = reader.GetDouble(1); _storedData.Balances.Add(playerId, balance); } } } // Check for and remove any inactive player balance data foreach (string playerId in new List<string>(_storedData.Balances.Keys)) { if (_storedData.Balances[playerId].Equals(_config.StartingBalance)) { using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); using (SQLiteCommand sqlCommand = new SQLiteCommand($"DELETE FROM balances WHERE playerid='{playerId}'", connection)) { sqlCommand.ExecuteNonQuery(); } } } } _storedData = new StoredData(); } } else if (_config.UseMySql) { if (emptyDatabase) { // Migrate/import the data file, if present foreach (KeyValuePair<string, double> playerData in _storedData.Balances) { using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); string query = $"INSERT INTO balances VALUES ('{playerData.Key}', {playerData.Value})"; using (MySqlCommand sqlCommand = new MySqlCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } } } } else if (_config.RemoveUnused) { Log("Reading data from MySQL database..."); _storedData = new StoredData(); using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); using (MySqlCommand sqlCommand = new MySqlCommand("SELECT DISTINCT playerid, value FROM balances", connection)) using (MySqlDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { string playerId = reader.GetString(0); double balance = reader.GetDouble(1); _storedData.Balances.Add(playerId, balance); } } } // Check for and remove any inactive player balance data foreach (string playerId in new List<string>(_storedData.Balances.Keys)) { if (_storedData.Balances[playerId].Equals(_config.StartingBalance)) { using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); using (MySqlCommand sqlCommand = new MySqlCommand($"DELETE FROM balances WHERE playerid='{playerId}'", connection)) { sqlCommand.ExecuteNonQuery(); } } } } _storedData = new StoredData(); } } _balanceLimits = new KeyValuePair<double, double>(_config.NegativeBalanceLimit, _config.BalanceLimit); } private bool CheckDatabase() { // Return true if database is empty or non-existent bool found = false; if (_config.UseSqLite) { using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); using (SQLiteCommand command = new SQLiteCommand("SELECT name FROM sqlite_master WHERE type='table' AND name='balances'", connection)) using (SQLiteDataReader reader = command.ExecuteReader()) { while (reader.Read()) { found = true; } } } if (!found) { SQLiteCommand command = new SQLiteCommand("DROP TABLE IF EXISTS balances", _sqlConnection); command.ExecuteNonQuery(); command = new SQLiteCommand("CREATE TABLE balances (playerid varchar(32) PRIMARY KEY, value DOUBLE DEFAULT 0)", _sqlConnection); command.ExecuteNonQuery(); return true; } } else if (_config.UseMySql) { using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); using (MySqlCommand command = new MySqlCommand($"SELECT * FROM information_schema.tables WHERE table_schema='{_config.MySql.Database}' AND table_name='balances' LIMIT 1;", connection)) using (MySqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { found = true; } } } if (!found) { MySqlCommand command = new MySqlCommand("DROP TABLE IF EXISTS balances", _mysqlConnection); command.ExecuteNonQuery(); command = new MySqlCommand("CREATE TABLE balances (playerid varchar(32) PRIMARY KEY, value DOUBLE DEFAULT 0)", _mysqlConnection); command.ExecuteNonQuery(); return true; } } return !found; } private void OnNewSave() { if (_config.WipeOnNewSave) { if (_config.UseSqLite) { SQLiteCommand command = new SQLiteCommand("DROP TABLE IF EXISTS balances", _sqlConnection); command.ExecuteNonQuery(); command = new SQLiteCommand("CREATE TABLE balances (playerid varchar(32) PRIMARY KEY, value DOUBLE DEFAULT 0)", _sqlConnection); command.ExecuteNonQuery(); } else if (_config.UseMySql) { SQLiteCommand command = new SQLiteCommand("DROP TABLE IF EXISTS balances", _sqlConnection); command.ExecuteNonQuery(); command = new SQLiteCommand("CREATE TABLE balances (playerid varchar(32) PRIMARY KEY, value DOUBLE DEFAULT 0)", _sqlConnection); command.ExecuteNonQuery(); } else { _storedData.Balances.Clear(); _changed = true; } Interface.Call("OnEconomicsDataWiped"); } } #endregion Initialization #region API Methods private double Balance(string playerId) { if (string.IsNullOrEmpty(playerId)) { LogWarning("Balance method called without a valid player ID"); return 0.0; } double balance = _config.StartingBalance; if (_config.UseSqLite) { using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); using (SQLiteCommand sqlCommand = new SQLiteCommand($"SELECT value FROM balances WHERE playerid='{playerId}'", connection)) using (SQLiteDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { balance = reader.GetDouble(0); } } } } else if (_config.UseMySql) { using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); using (MySqlCommand sqlCommand = new MySqlCommand($"SELECT value FROM balances WHERE playerid='{playerId}'", connection)) using (MySqlDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { balance = reader.GetDouble(0); } } } } else { _storedData.Balances.TryGetValue(playerId, out balance); } // TODO: Handle potential database read failure; check if balance changed or not return balance; } private double Balance(ulong playerId) => Balance(playerId.ToString()); private KeyValuePair<double, double> BalanceLimits() => _balanceLimits; private bool Deposit(string playerId, double amount) { if (string.IsNullOrEmpty(playerId)) { LogWarning("Deposit method called without a valid player ID"); return false; } if (amount > 0 && SetBalance(playerId, amount + Balance(playerId))) { Interface.Call("OnEconomicsDeposit", playerId, amount); if (_config.LogTransactions) { LogToFile("transactions", $"[{DateTime.Now}] {GetLang("LogDeposit", null, amount, playerId)}", this); } return true; } return false; } private bool Deposit(ulong playerId, double amount) => Deposit(playerId.ToString(), amount); private bool SetBalance(string playerId, double amount) { if (string.IsNullOrEmpty(playerId)) { LogWarning("SetBalance method called without a valid player ID"); return false; } amount = Math.Round(amount, 2); if (amount < 0 && _config.NegativeBalanceLimit == 0) { return false; } if (_config.BalanceLimit > 0 && amount > _config.BalanceLimit) { amount = _config.BalanceLimit; } else if (_config.NegativeBalanceLimit < 0 && amount < _config.NegativeBalanceLimit) { amount = _config.NegativeBalanceLimit; } double oldAmount = Balance(playerId); if (oldAmount > _config.StartingBalance) { if (_config.UseSqLite) { using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); //string query = $"UPDATE balances SET value={amount} WHERE playerid='{playerId}'"; //string query = $"INSERT INTO balances VALUES ('{playerId}', {amount})"; //string query = $"INSERT INTO balances (playerid, value) VALUES ('{playerId}', {amount})" // + "ON CONFLICT (playerid) DO UPDATE SET value=excluded.value"; string query = $"REPLACE INTO balances (playerid, value) VALUES('{playerId}', {amount})"; using (SQLiteCommand sqlCommand = new SQLiteCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } } } else if (_config.UseMySql) { using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); //string query = $"UPDATE balances SET value={amount} WHERE playerid='{playerId}'"; //string query = $"INSERT INTO balances VALUES ('{playerId}', {amount})"; //string query = $"INSERT INFO balances VALUES ('{playerId}', {amount})" // + $"ON DUPLICATE KEY UPDATE playerid='{playerId}', value={amount}"; string query = $"REPLACE INTO balances (playerid, value) VALUES('{playerId}', {amount})"; using (MySqlCommand sqlCommand = new MySqlCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } } } else { if (_storedData.Balances.ContainsKey(playerId)) { _storedData.Balances[playerId] = amount; } else { _storedData.Balances.Add(playerId, amount); } _changed = true; } Interface.Call("OnEconomicsBalanceUpdated", playerId, amount, oldAmount); Interface.CallDeprecatedHook("OnBalanceChanged", "OnEconomicsBalanceUpdated", new DateTime(2023, 1, 1), playerId, amount); if (_config.LogTransactions) { LogToFile("transactions", $"[{DateTime.Now}] {GetLang("LogSetBalance", null, amount, playerId)}", this); } } return true; } private bool SetBalance(ulong playerId, double amount) => SetBalance(playerId.ToString(), amount); private bool Transfer(string playerId, string targetId, double amount) { if (string.IsNullOrEmpty(playerId)) { LogWarning("Transfer method called without a valid player ID"); return false; } if (Withdraw(playerId, amount) && Deposit(targetId, amount)) { Interface.Call("OnEconomicsTransfer", playerId, targetId, amount); if (_config.LogTransactions) { LogToFile("transactions", $"[{DateTime.Now}] {GetLang("LogTransfer", null, amount, targetId, playerId)}", this); } return true; } return false; } private bool Transfer(ulong playerId, ulong targetId, double amount) { return Transfer(playerId.ToString(), targetId.ToString(), amount); } private bool Withdraw(string playerId, double amount) { if (string.IsNullOrEmpty(playerId)) { LogWarning("Withdraw method called without a valid player ID"); return false; } double balance = Balance(playerId); if (amount >= 0 || balance <= _config.NegativeBalanceLimit && _config.NegativeBalanceLimit < 0) { if (balance >= amount && SetBalance(playerId, balance - amount) || _config.NegativeBalanceLimit <= balance - amount && SetBalance(playerId, balance - amount)) { Interface.Call("OnEconomicsWithdrawl", playerId, amount); if (_config.LogTransactions) { LogToFile("transactions", $"[{DateTime.Now}] {GetLang("LogWithdrawl", null, amount, playerId)}", this); } return true; } } return false; } private bool Withdraw(ulong playerId, double amount) => Withdraw(playerId.ToString(), amount); #endregion API Methods #region Commands #region Balance Command private void CommandBalance(IPlayer player, string command, string[] args) { if (args != null && args.Length > 0) { if (!player.HasPermission(PermissionBalance)) { Message(player, "NotAllowed", command); return; } IPlayer target = FindPlayer(args[0], player); if (target == null) { Message(player, "UsageBalance", command); return; } Message(player, "PlayerBalance", target.Name, Balance(target.Id)); return; } if (player.IsServer) { Message(player, "UsageBalanceOthers", command); } else { Message(player, "YourBalance", Balance(player.Id)); } } #endregion Balance Command #region Deposit Command private void CommandDeposit(IPlayer player, string command, string[] args) { if (!player.HasPermission(PermissionDeposit)) { Message(player, "NotAllowed", command); return; } if (args == null || args.Length <= 1) { Message(player, "UsageDeposit", command); return; } double amount; double.TryParse(args[1], out amount); if (amount <= 0) { Message(player, "ZeroAmount"); return; } if (args[0] == "*") { if (!player.HasPermission(PermissionDepositAll)) { Message(player, "NotAllowed", command); return; } int receivers = 0; if (_config.UseSqLite) { using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); // TODO: INSERT OR UPDATE string query = $"UPDATE balances SET value=value+{amount}"; using (SQLiteCommand sqlCommand = new SQLiteCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } using (SQLiteCommand sqlCommand = new SQLiteCommand("SELECT COUNT(*) FROM balances", connection)) using (SQLiteDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { receivers = reader.GetInt32(0); } } } } else if (_config.UseMySql) { using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); // TODO: INSERT OR UPDATE string query = $"UPDATE balances SET value=value+{amount}"; using (MySqlCommand sqlCommand = new MySqlCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } using (MySqlCommand sqlCommand = new MySqlCommand("SELECT COUNT(*) FROM balances", connection)) using (MySqlDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { receivers = reader.GetInt32(0); } } } } else { foreach (string targetId in _storedData.Balances.Keys.ToList()) { if (Deposit(targetId, amount)) { receivers++; } } } Message(player, "DepositedToAll", amount * receivers, amount, receivers); } else { IPlayer target = FindPlayer(args[0], player); if (target == null) { return; } if (Deposit(target.Id, amount)) { Message(player, "PlayerBalance", target.Name, Balance(target.Id)); } else { Message(player, "TransactionFailed", target.Name); } } } #endregion Deposit Command #region Set Balance Command private void CommandSetBalance(IPlayer player, string command, string[] args) { if (!player.HasPermission(PermissionSetBalance)) { Message(player, "NotAllowed", command); return; } if (args == null || args.Length <= 1) { Message(player, "UsageSetBalance", command); return; } double amount; double.TryParse(args[1], out amount); if (amount < 0) { Message(player, "NegativeBalance"); return; } if (args[0] == "*") { if (!player.HasPermission(PermissionSetBalanceAll)) { Message(player, "NotAllowed", command); return; } int receivers = 0; if (_config.UseSqLite) { using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); // TODO: INSERT OR UPDATE string query = $"UPDATE balances SET value={amount}"; using (SQLiteCommand sqlCommand = new SQLiteCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } using (SQLiteCommand sqlCommand = new SQLiteCommand("SELECT COUNT(*) FROM balances", connection)) using (SQLiteDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { receivers = reader.GetInt32(0); } } } } else if (_config.UseMySql) { using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); // TODO: INSERT OR UPDATE string query = $"UPDATE balances SET value={amount}"; using (MySqlCommand sqlCommand = new MySqlCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } using (MySqlCommand sqlCommand = new MySqlCommand("SELECT COUNT(*) FROM balances", connection)) using (MySqlDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { receivers = reader.GetInt32(0); } } } } else { foreach (string targetId in _storedData.Balances.Keys.ToList()) { if (SetBalance(targetId, amount)) { receivers++; } } } Message(player, "SetBalanceForAll", amount, receivers); } else { IPlayer target = FindPlayer(args[0], player); if (target == null) { return; } if (SetBalance(target.Id, amount)) { Message(player, "PlayerBalance", target.Name, Balance(target.Id)); } else { Message(player, "TransactionFailed", target.Name); } } } #endregion Set Balance Command #region Transfer Command private void CommandTransfer(IPlayer player, string command, string[] args) { if (!player.HasPermission(PermissionTransfer)) { Message(player, "NotAllowed", command); return; } if (args == null || args.Length <= 1) { Message(player, "UsageTransfer", command); return; } double amount; double.TryParse(args[1], out amount); if (amount <= 0) { Message(player, "ZeroAmount"); return; } if (args[0] == "*") { if (!player.HasPermission(PermissionTransferAll)) { Message(player, "NotAllowed", command); return; } if (!Withdraw(player.Id, amount)) { Message(player, "YouLackMoney"); return; } int receivers = players.Connected.Count(); double splitAmount = amount /= receivers; foreach (IPlayer target in players.Connected) { if (Deposit(target.Id, splitAmount)) { if (target.IsConnected) { Message(target, "ReceivedFrom", splitAmount, player.Name); } } } Message(player, "TransferedToAll", amount, splitAmount, receivers); } else { IPlayer target = FindPlayer(args[0], player); if (target == null) { return; } if (target.Equals(player)) { Message(player, "TransferToSelf"); return; } if (!Withdraw(player.Id, amount)) { Message(player, "YouLackMoney"); return; } if (Deposit(target.Id, amount)) { Message(player, "TransferredTo", amount, target.Name); Message(target, "ReceivedFrom", amount, player.Name); } else { Message(player, "TransactionFailed", target.Name); } } } #endregion Transfer Command #region Withdraw Command private void CommandWithdraw(IPlayer player, string command, string[] args) { if (!player.HasPermission(PermissionWithdraw)) { Message(player, "NotAllowed", command); return; } if (args == null || args.Length <= 1) { Message(player, "UsageWithdraw", command); return; } double amount; double.TryParse(args[1], out amount); if (amount <= 0) { Message(player, "ZeroAmount"); return; } if (args[0] == "*") { if (!player.HasPermission(PermissionWithdrawAll)) { Message(player, "NotAllowed", command); return; } int receivers = 0; if (_config.UseSqLite) { using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); // TODO: INSERT OR UPDATE string query = $"UPDATE balances SET value=value-{amount}"; using (SQLiteCommand sqlCommand = new SQLiteCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } using (SQLiteCommand sqlCommand = new SQLiteCommand("SELECT COUNT(*) FROM balances", connection)) using (SQLiteDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { receivers = reader.GetInt32(0); } } } } else if (_config.UseMySql) { using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); // TODO: INSERT OR UPDATE string query = $"UPDATE balances SET value=value-{amount}"; using (MySqlCommand sqlCommand = new MySqlCommand(query, connection)) { sqlCommand.ExecuteNonQuery(); } using (MySqlCommand sqlCommand = new MySqlCommand("SELECT COUNT(*) FROM balances", connection)) using (MySqlDataReader reader = sqlCommand.ExecuteReader()) { while (reader.Read()) { receivers = reader.GetInt32(0); } } } } else { foreach (string targetId in _storedData.Balances.Keys.ToList()) { if (Withdraw(targetId, amount)) { receivers++; } } } Message(player, "WithdrawnForAll", amount * receivers, amount, receivers); } else { IPlayer target = FindPlayer(args[0], player); if (target == null) { return; } if (Withdraw(target.Id, amount)) { Message(player, "PlayerBalance", target.Name, Balance(target.Id)); } else { Message(player, "YouLackMoney", target.Name); } } } #endregion Withdraw Command #region Wipe Command private void CommandWipe(IPlayer player, string command, string[] args) { if (!player.HasPermission(PermissionWipe)) { Message(player, "NotAllowed", command); return; } if (_config.UseSqLite) { using (SQLiteConnection connection = new SQLiteConnection(_connectionStr)) { connection.Open(); using (SQLiteCommand sqlCommand = new SQLiteCommand("DELETE FROM balances", connection)) { sqlCommand.ExecuteNonQuery(); } } } else if (_config.UseMySql) { using (MySqlConnection connection = new MySqlConnection(_connectionStr)) { connection.Open(); using (MySqlCommand sqlCommand = new MySqlCommand("DELETE FROM balances", connection)) { sqlCommand.ExecuteNonQuery(); } } } else { _storedData = new StoredData(); _changed = true; SaveData(); } Message(player, "DataWiped"); Interface.Call("OnEconomicsDataWiped", player); } #endregion Wipe Command #endregion Commands #region Helpers private void AddLocalizedCommand(string command) { foreach (string language in lang.GetLanguages(this)) { foreach (KeyValuePair<string, string> message in lang.GetMessages(language, this)) { if (message.Key.Equals(command) && !string.IsNullOrEmpty(message.Value)) { AddCovalenceCommand(message.Value, command); } } } } private IPlayer FindPlayer(string playerNameOrId, IPlayer player) { IPlayer[] foundPlayers = players.FindPlayers(playerNameOrId).ToArray(); if (foundPlayers.Length > 1) { Message(player, "PlayersFound", string.Join(", ", foundPlayers.Select(p => p.Name).Take(10).ToArray()).Truncate(60)); return null; } IPlayer target = foundPlayers.Length == 1 ? foundPlayers[0] : null; if (target == null) { Message(player, "NoPlayersFound", playerNameOrId); return null; } return target; } private string GetLang(string langKey, string playerId = null, params object[] args) { return string.Format(lang.GetMessage(langKey, this, playerId), args); } private void Message(IPlayer player, string textOrLang, params object[] args) { if (player.IsConnected) { string message = GetLang(textOrLang, player.Id, args); player.Reply(message != textOrLang ? message : textOrLang); } } #endregion Helpers } } #region Extension Methods namespace Oxide.Plugins.EconomicsExtensionMethods { public static class ExtensionMethods { public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T> { if (val.CompareTo(min) < 0) { return min; } if (val.CompareTo(max) > 0) { return max; } return val; } } } #endregion Extension Methods
  22. Billy Joe

    Blackjack

    Version 1.0.2

    8 downloads

    Blackjack plugin is just like any other blackjack game, although is a portable version players can do from anywhere on your server! This plugin is fully configurable and supports Economics plugin as well as Server Rewards. Features: Customizable Card Deck Economics, Server Rewards, & Custom Item Betting Player vs Dealer Double Down, with Pushing if player and dealer have same card value. Ace 1-11 depending on your cards value. Language: There is a full language file which allows server owners to fully support other languages. Commands: /blackjack or /bj - Open the Blackjack UI Menu. Config: { "Bet Settings": { "Use Economics": false, "Use Server Rewards": false, "Use Item": true, "Item Shortname": "scrap", "Item Skin ID": 0, "Minimum Bet": 500, "Maximum Bet": 2000 }, "Chat Settings": { "Message Prefix": "<color=#FFD700>[Billys Blackjack]</color>", "Message Icon (Steam ID)": 76561198194158447 }, "Card Deck": [ { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/2_small_clubs.png", "cardType": "2", "cardValue": 2 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/3_small_clubs.png", "cardType": "3", "cardValue": 3 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/4_small_clubs.png", "cardType": "4", "cardValue": 4 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/5_small_clubs.png", "cardType": "5", "cardValue": 5 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/6_small_clubs.png", "cardType": "6", "cardValue": 6 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/7_small_clubs.png", "cardType": "7", "cardValue": 7 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/8_small_clubs.png", "cardType": "8", "cardValue": 8 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/9_small_clubs.png", "cardType": "9", "cardValue": 9 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/10_small_clubs.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/Jack_small_clubs.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/King_small_clubs.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/Queen_small_clubs.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/clubs/Ace_small_clubs.png", "cardType": "Ace", "cardValue": 11 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/2_small_diamonds.png", "cardType": "2", "cardValue": 2 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/3_small_diamonds.png", "cardType": "3", "cardValue": 3 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/4_small_diamonds.png", "cardType": "4", "cardValue": 4 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/5_small_diamonds.png", "cardType": "5", "cardValue": 5 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/6_small_diamonds.png", "cardType": "6", "cardValue": 6 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/7_small_diamonds.png", "cardType": "7", "cardValue": 7 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/8_small_diamonds.png", "cardType": "8", "cardValue": 8 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/9_small_diamonds.png", "cardType": "9", "cardValue": 9 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/10_small_diamonds.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/Jack_small_diamonds.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/King_small_diamonds.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/Queen_small_diamonds.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/diamonds/Ace_small_diamonds.png", "cardType": "Ace", "cardValue": 11 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/2_small_hearts.png", "cardType": "2", "cardValue": 2 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/3_small_hearts.png", "cardType": "3", "cardValue": 3 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/4_small_hearts.png", "cardType": "4", "cardValue": 4 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/5_small_hearts.png", "cardType": "5", "cardValue": 5 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/6_small_hearts.png", "cardType": "6", "cardValue": 6 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/7_small_hearts.png", "cardType": "7", "cardValue": 7 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/8_small_hearts.png", "cardType": "8", "cardValue": 8 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/9_small_hearts.png", "cardType": "9", "cardValue": 9 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/10_small_hearts.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/Jack_small_hearts.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/King_small_hearts.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/Queen_small_hearts.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/hearts/Ace_small_hearts.png", "cardType": "Ace", "cardValue": 11 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/2_small_spades.png", "cardType": "2", "cardValue": 2 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/3_small_spades.png", "cardType": "3", "cardValue": 3 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/4_small_spades.png", "cardType": "4", "cardValue": 4 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/5_small_spades.png", "cardType": "5", "cardValue": 5 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/6_small_spades.png", "cardType": "6", "cardValue": 6 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/7_small_spades.png", "cardType": "7", "cardValue": 7 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/8_small_spades.png", "cardType": "8", "cardValue": 8 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/9_small_spades.png", "cardType": "9", "cardValue": 9 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/10_small_spades.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/Jack_small_spades.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/King_small_spades.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/Queen_small_spades.png", "cardType": "10", "cardValue": 10 }, { "cardImage": "assets/content/ui/gameui/cardgames/deck_small/spades/Ace_small_spades.png", "cardType": "Ace", "cardValue": 11 } ] }
    $9.99
  23. Version 1.0.11

    205 downloads

    Plugin gives players the ability to exchange scrap for currency at npc vending machines, with the ability to set exchange rates via the config. By default the plugin runs a command set in the config for Economics on Umod. Permission: scrapvendingexchange.use scrapvendingexchange.admin Commands: /sve add|del <prefab-path>, full vending machine prefab path /sve min|max <number>, sets min and max amount to exchange per transaction /sve percent <number>, sets the exchange percentage Deposit Example commands: Economics: deposit {userid} {amount} Server Rewards: sr add {userid} {amount} Configuration: { "deposit command (default Economics arguments {userid} {amount})": "deposit {userid} {amount}", "setup command name": "sve", "exchange item id": -932201673, "exchange item skinid": 0, "min amount to exchange per transaction": 1, "max amount to exchange per transaction": 1000, "exchange percent (default 80% percent ex: 1000 = 800)": 80, "user interface": { "success button color": "0.337 0.424 0.196 0.85", "success button font color": "0.607 0.705 0.431", "clear button color": "0.75 0.75 0.75 0.3", "clear button font color": "0.75 0.75 0.75 1", "panel color": "0.65 0.65 0.65 0.25", "PanelFontColor": "0.75 0.75 0.75 0.9", "panel input color": "0 0 0 0.42", "panel input font color": "1 1 1 0.58", "panel input placeholder color": "0.7 0.7 0.7 0.25", "panel offset position": { "position": { "x": -10.0, "y": 470.0 }, "size": { "x": 310.0, "y": 118.0 } }, "popup font color": "1 1 1 0.89", "popup error color": "0.631 0.282 0.22 0.98", "popup success color": "0.337 0.424 0.196 0.98", "popup offset position": { "position": { "x": -10.0, "y": 390.0 }, "size": { "x": 310.0, "y": 28.0 } } }, "allowed prefabs (leave empty to allow all vending machines)": [] }
    $3.00
  24. Version 1.0.2

    18 downloads

    Inventory Shop is a plugin that introduces a fast user friendly shop, just a simple drag and drop to sell/purchase items. This plugin comes very configurable, with dynamic category's and shop item list with the ability to add custom items with permission and command run on purchase. All feedback will be accounted for and applied in future updates, what are you waiting for make your players love the unique fast to use shop today! Plugin Permissions: inventoryshop.useshop - Allows user to access the /shop command Plugin Config: { "Economic Settings": { "Use Economics": false, "Use Server Rewards": false, "Use Item Economy": true, "Item Name (For display)": "Scrap", "Item ID": -932201673, "Item Skin": 0 }, "Prevention Settings": { "Prevent shop when building blocked": true }, "NoEscape Settings": { "Use No Escape": true, "Block when Combat Blocked": true, "Block when Raid Blocked": true }, "Chat Settings": { "Message Prefix": "<color=#FFD700>[Inventory Shop]</color>", "Message Icon (Steam ID)": 76561198194158447, "Shop CMD Abbrivations": [ "s", "rewards" ] }, "Sound Effects": { "Purchase Sound Effect": "assets/prefabs/deployable/vendingmachine/effects/vending-machine-purchase-human.prefab", "Sell Sound Effect": "assets/prefabs/deployable/vendingmachine/effects/vending-machine-purchase-human.prefab", "Save Inventory Effect": "assets/prefabs/deployable/locker/sound/equip_zipper.prefab", "Not Enough Money Effect": "assets/prefabs/locks/keypad/effects/lock.code.denied.prefab", "Button Press Effect": "assets/bundled/prefabs/fx/notice/stack.world.fx.prefab" }, "Permission Settings": { "Require permission for Shop": true, "Shop permission": "inventoryshop.useshop" }, "Additional Settings": { "Allow shop open using shift + middle mouse": true, "Log players buy/sell transactions to console": true }, "Shop Categories": { "Weapons": [ { "Item ID": 1545779598, "Item Display Name (Leave blank for default)": "", "Item Buy Price (for 1)": 5000, "Item Sell Price (for 1)": 3000, "Item Skin": 0, "Item Amount In Store": 1, "Item Permission": "", "Item Command": "", "Condition Of Item": 150.0, "Weapon Attributes": { "Ammo Item ID": -1211166256, "Amount in Magazine": 30 } }, { "Item ID": -1812555177, "Item Display Name (Leave blank for default)": "", "Item Buy Price (for 1)": 3000, "Item Sell Price (for 1)": 1500, "Item Skin": 0, "Item Amount In Store": 1, "Item Permission": "", "Item Command": "", "Condition Of Item": 150.0, "Weapon Attributes": { "Ammo Item ID": -1211166256, "Amount in Magazine": 30 } }, { "Item ID": 28201841, "Item Display Name (Leave blank for default)": "", "Item Buy Price (for 1)": 3250, "Item Sell Price (for 1)": 2000, "Item Skin": 0, "Item Amount In Store": 1, "Item Permission": "", "Item Command": "", "Condition Of Item": 150.0, "Weapon Attributes": { "Ammo Item ID": -1211166256, "Amount in Magazine": 30 } } ], "Attire": [ { "Item ID": 1266491000, "Item Display Name (Leave blank for default)": "", "Item Buy Price (for 1)": 550, "Item Sell Price (for 1)": -1, "Item Skin": 0, "Item Amount In Store": 1, "Item Permission": "", "Item Command": "", "Condition Of Item": 200.0, "Weapon Attributes": { "Ammo Item ID": -1, "Amount in Magazine": -1 } }, { "Item ID": -470439097, "Item Display Name (Leave blank for default)": "", "Item Buy Price (for 1)": 600, "Item Sell Price (for 1)": -1, "Item Skin": 0, "Item Amount In Store": 1, "Item Permission": "", "Item Command": "", "Condition Of Item": 200.0, "Weapon Attributes": { "Ammo Item ID": -1, "Amount in Magazine": -1 } }, { "Item ID": 491263800, "Item Display Name (Leave blank for default)": "", "Item Buy Price (for 1)": 600, "Item Sell Price (for 1)": -1, "Item Skin": 0, "Item Amount In Store": 1, "Item Permission": "", "Item Command": "", "Condition Of Item": 200.0, "Weapon Attributes": { "Ammo Item ID": -1, "Amount in Magazine": -1 } } ], "Resources": [ { "Item ID": -151838493, "Item Display Name (Leave blank for default)": "", "Item Buy Price (for 1)": 10, "Item Sell Price (for 1)": -1, "Item Skin": 0, "Item Amount In Store": 1000, "Item Permission": "", "Item Command": "", "Condition Of Item": 0.0, "Weapon Attributes": { "Ammo Item ID": -1, "Amount in Magazine": -1 } }, { "Item ID": -2099697608, "Item Display Name (Leave blank for default)": "", "Item Buy Price (for 1)": 50, "Item Sell Price (for 1)": -1, "Item Skin": 0, "Item Amount In Store": 10000, "Item Permission": "", "Item Command": "", "Condition Of Item": 0.0, "Weapon Attributes": { "Ammo Item ID": -1, "Amount in Magazine": -1 } }, { "Item ID": -1581843485, "Item Display Name (Leave blank for default)": "", "Item Buy Price (for 1)": 100, "Item Sell Price (for 1)": -1, "Item Skin": 0, "Item Amount In Store": 1000, "Item Permission": "", "Item Command": "", "Condition Of Item": 0.0, "Weapon Attributes": { "Ammo Item ID": -1, "Amount in Magazine": -1 } } ] } } Plugin Language File: { "CannotDragOnItem": "You can not drag onto a slot with a item already in it.", "PurchaseSuccessful": "You have successfully purchased {0}x {1} for {2}.", "ErrorStacking": "You would be exceeding the max stack size of that item, please drag into another slot.", "ErrorPurchase": "There was an error purchasing this item, please try again.", "CannotAfford": "You can not afford this item with the selected amount.", "ItemCantBeSold": "This item is not able to be sold.", "SoldItem": "You have sold {0}x {1} for {2}.", "ErrorSelling": "There was an error selling this item, please try again.", "BuildingBlocked": "You cannot use this action when building blocked.", "CombatBlocked": "You cannot use this action when combat blocked.", "RaidBlocked": "You cannot use this action when raid blocked.", "InformationText": "<color=green>Purchase</color> items:\nSelect the BUY action in the action menu, and drag items from the crate into either your belt, main, or attire container. A conformation will pop up, with the price and amount you are purchasing.\n\n<color=red>Sell</color> items:\nSelect the SELL action in the action menu, and drag items from your inventory into the container on the right.", "NotEnoughAuto": "You did not have enough balance to auto purchase your kit.", "NoPermission": "You do not have permission to use this command.", "BuyTransactionLog": "{0} [{1}] has bought {3}x {2} for {4}.", "SellTransactionLog": "{0} [{1}] has sold {3}x {2} for {4}.", "ConformationText": "Conformation", "BuyConformationText": "Are you sure you want to buy {0}x {1} for {2}?", "SellConformationText": "Are you sure you want to sell {0}x {1} for {2}?", "ConfirmButton": "Confirm", "CancelButton": "Cancel", "NoConfBuyButton": "Purchase and dont show again", "NoConfSellButton": "Sell and dont show again" } Credits: Shoutout to RIPJAWBONES for giving me the idea and UI layout.
    $14.99
  25. Mattdokn

    Rep Rewards

    Version 1.0.0

    846 downloads

    Reward players for advertising your server! Players with a key of your choosing in their name will be given reoccurring rewards. Player names can have the key anywhere as long as it's continuous, examples: Key: RR RR-Username RR username useRRname usernameRR Offers full integration with ServerRewards and Economy plugins to allow for rewards such as shop points and money. Examples for each are included with the default config that are generated on the plugin's initial load. Examples for rust items are also included, using the short-name as the key to allow for readable configs. Short names can be found here: CorrosionHour I offer full support through comments and pm's, as well as feature requests.
    $2.00
1.1m

Downloads

Total number of downloads.

5.5k

Customers

Total customers served.

78.6k

Files Sold

Total number of files sold.

1.5m

Payments Processed

Total payments processed.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.