Search the Community
Showing results for tags 'oxidation'.
-
Version 2024.5.2.1658
216 downloads
SAVE 13% WHEN BUYING THE BUNDLE NOW SUPPORTING PROCGEN AND CUSTOM URL BASED MAPS ! This plugin will allow you to setup automatic server wipes without requiring external scripts. This plugin is very useful for any server owner but I'm positive that it will be really useful for those hosting providers running panel based game instances where you do not have full access to customize the server or the provided wipe tool is very limited. You should have a look at the suggested plugins for Oxidation's Scheduler which is a perfect fit for a fully in-game automatic wipe process. The plugin also allows you to set a list of seeds that will be used at server wipe to select the new map seed. You can define as many different wipe types as you'd like on the config file like so: This example is for a "forced" wipe. In order to execute the wipe type on the rcon console "wipe forced". "Forced": { "Restart": 120, "Message": "A server wipe is being executed, we'll be back shortly", "Game": { "Blueprints": true, "Logs": true, "Map": true, "PlayerDeaths": true, "PlayerIdentities": true, "PlayerStates": true, "PlayerTokens": true }, "Plugins": { "Convalence": true, "Data": true, "Groups": true, "Language": true, "Logs": true, "Users": true }, "Files": [ "my/custom/path/this_file_will_be_deleted.json" ], "Blacklist": [ "carbon/data/this_file_will_never_be_deleted.json" ] } This example is for a "weekly" wipe. In order to execute the wipe type on the rcon console "wipe weekly". "Weekly": { "Restart": 120, "Message": "A server wipe is being executed, we'll be back shortly", "Game": { "Blueprints": false, "Logs": true, "Map": true, "PlayerDeaths": true, "PlayerIdentities": false, "PlayerStates": true, "PlayerTokens": false }, "Plugins": { "Convalence": false, "Data": true, "Groups": false, "Language": true, "Logs": true, "Users": false }, "Files": [ "my/custom/path/this_file_will_be_deleted.json" ], "Blacklist": [ "carbon/data/this_file_will_never_be_deleted.json" ] } This is a standalone Harmony patch, Oxide installation is optional. Copy the Oxidation.Wiper.X.dll file into your HarmonyMods folder and restart your server. At the first server start after installing the patch a new configuration file Oxidation.Wiper.json will be created at the HarmonyMods folder. What is Harmony ? Harmony is a library for patching .NET code during runtime, it directly manipulates game code (CIL) without any additional abstraction layer such as Oxide. The direct patching of the game's byte code allows more performant modding as developers no longer need to rely on third party code, events or hooks to build custom functionality.$4.99 -
Version 1.4.15
249 downloads
SAVE 13% WHEN BUYING THE BUNDLE This is a server management plugin. It allows you to have consistency and visibility over all the information related with your server, including it's basic configuration. You may find this valuable no matter if you manage ONE or TEN servers, it works great with automation tools, docker and alike. It has four main features: Wipe schedule calculator (support weekly, biweekly and monthly) Manages server information (Title, description, tags, logo, banner, etc) Manages the basic server configuration (cvars) Manages Oxide's groups, permissions and user membership. Loading messages when a player is joining and/or waiting in queue. Timed messages (adverts) Public chat command "!wipe" that will inform: Last wipe date Next wipe date The current time in UTC Support the new Nuclear Missile Silo computer countdown Support dynamic slots (increase total slots according to connected players) 1. Wipe schedule calculator The plugin provides four "tokens" that you can use within the server's title or description to inform your users when was the last wipe and when it will be the next wipe. You can customize the date format and wipe schedule on the config file and the wipe schedule calculator will have into account the Thursday forced wipe. // You can format the date as you'd like "Date": { "Short": "dd/MM", "Long": "dd/MM/yyyy" }, "Wipe": { "DoW": 4, "Hour": 19, "Timezone": "Europe/London", "Frequency": "BiWeekly" }, 2. Manages server information This one is pretty self-explanatory, it allows you to define all the metadata about your server. "Server": { "Name": "DEVELOPMENT SERVER | %LASTWIPE%", "Description": [ "Map size is %WORLDSIZE% using seed %WORLDSEED%.", "Last wipe was at %LASTWIPE_LONG%, Next wipe is at %NEXTWIPE_LONG%", "Server has %UPTIME% seconds uptime, running at %FPS% fps with %ONLINE%/%MAXSLOTS% players online." ], "Banner image": "https://assets.example.com/banner.jpg", "Logo image": "https://assets.example.com/logo.png", "Tags": [ "weekly", "vanilla" ], "Website": "https://example.com/", "Custom map name": "kasvoton was here", "Wipe schedule": 7 }, Notice the special feature "Custom map name" which allows you to customize the map name that is displayed on the server list (Procedural Map). This shows in not only at Rust's in-game server browser, but also all on all the other sites that show off your server, i.e. Battlemetrics. WE DO NOT REQUIRE OXIDE'S SANDBOX MODE TO BE TURNED OFF AS OTHER PLUGINS DO. 3. Manages the basic server configuration (cvars) It allows you to have a clear view of what cvars are applied, very helpful if you run automation tools such as docker or github to manage server configurations. "CVars": { "fps.limit": "32", "server.tickrate": "10", "server.censorplayerlist": "true", "server.maxplayers": "8", "env.time": "12", "env.progresstime": "false" }, 4. Manages Oxide's groups, permissions and user membership. When you define a group inside the plugin's config file it means that the plugin will make sure that the group is created, that the permissions are assigned and that the listed members are part of the group. You can (and should) assign users to your groups using the oxide's tools or any other third party plugin as usual, the only difference is that the members listed on this config file will always be added back to the groups even when manually removed. "Permissions": { "Delay": 60.0, "Groups": [ { "Name": "admin", "Title": "Administrators", "Parent": "developer", "Rank": 0, "Default": false, "Permissions": [], "Members": [] }, { "Name": "default", "Title": "Default", "Parent": null, "Rank": 0, "Default": true, "Permissions": [], "Members": [ "*" ] }, { "Name": "developer", "Title": "Developer", "Parent": "administrator", "Rank": 800, "Default": false, "Permissions": [ "plugin.e", "plugin.f" ], "Members": [ "123456789123456789" ] }, { "Name": "administrator", "Title": "Administrator", "Parent": "moderator", "Rank": 80, "Default": false, "Permissions": [ "plugin.b", "plugin.c", "plugin.d" ], "Members": [ "123456789123456789", "123456789123456789" ] }, { "Name": "moderator", "Title": "Moderator", "Parent": "default", "Rank": 60, "Default": false, "Permissions": [ "plugin.a" ], "Members": [ "123456789123456789", "123456789123456789", "123456789123456789" ] } ] } Note the important config parameter "Delay", when the server starts we have no way to tell in which order the plugins will get loaded by Oxide, which means that when OxidationMetadata loads it's probable that we will not be the last one getting loaded. If we try to assign a permission to a group but the third party plugin has not yet loaded then the permission is not found and we'll get an error. The "Delay" creates a waiting period for OxidationMetadata to wait for all other plugins to load and only then it tries to assign the permissions, the value of the delay is really dependent of your own server. List of supported string format "tokens": %FPS% Average FPS value on the server %MAXSLOTS% Max number of players on the server %ONLINE% Total number of online players %UPTIME% Server uptime in seconds %WORLDSEED% Seed used to generate the world %WORLDSIZE% World size i.e. 3500 %LASTWIPE% Last wipe date formatted in short form %LASTWIPE_LONG% Last wipe date formatted in long form %NEXTWIPE% Next wipe date formatted in short form %NEXTWIPE_LONG% Next wipe date formatted in long form$4.99 -
Version 1.3.4
299 downloads
SAVE 10% WHEN BUYING THE BUNDLE We are proud to announce the release of Crafting Manager superseding "Instant Crafting". Crafting Manager main features: Instant crafting (craftingmanager.instant.allow) Define a global scaling per workbench tier to be applied to all users by default Create as many "custom" profiles you need, each one will have a permission to control who gets access to the custom scaling Item blacklist allows you to block items from being crafted. Players get a message when the item is uncraftable. PermanentWorkbenchLevel permanently assigns workbench level to your players. Example of a custom profile, the values are in percentage of the original crafting duration. If you want to craft a Cupboard (30s original) and set tier0 to 0.5 (50%) then the Cupboard will take 15s to craft. "vip1": { "0": 0.25, "1": 0.5, "2": 0.75, "3": 1.0 } To assign the vip1 profile to a user type "o.grant user my_player craftingmanager.profile.example1", to assign it to a group type "o.grant group my_group craftingmanager.profile.example1". If you'd like to assign instant crafting it to all your players just grant the permission to the default group by typing "o.grant group default craftingmanager.instant.allow". Full configuration example: { "CraftingScale": { "Global": { "0": 1.0, "1": 1.0, "2": 1.0, "3": 1.0 }, "Profiles": { "example1": { "0": 0.25, "1": 0.5, "2": 0.75, "3": 1.0 }, "example2": { "0": 0.0, "1": 0.25, "2": 0.5, "3": 0.75 } } }, "Miscellaneous": { "InstantCrafting": 1.0, "PermanentWorkbenchLevel": 0 }, "BlacklistedItems": [ "syringe.medical", "explosives", "autoturret" ] }$4.99- 26 comments
- 2 reviews
-
Version 1.0.7
69 downloads
This plugin will allow your players, based on permission, to either instantly collect the ore/wood resource or always hit the x-marker. This plugin provides two functionalities: Players with the "geespot.instant" permission will instant gather Ore and Wood at first hit. Players with the "geespot.xmarker" permission will always trigger the X marker mini-game no matter where they hit on the model.$3.99 -
Version 1.0.20
295 downloads
This plugins allows your players to spawn helicopters on demand. Everything is configured in custom profiles, each profile has a name, the type of the helicopter and the settings. Please report any bugs either by sending a private message here or on Discord. I'm also open to new ideas and improvement requests. I'm online on the Codefling Discord channel. What's new ? Better boundary validation before spawning a vehicle Cool down period is displayed in day min and seconds Entity limit per profile Automatically fetch an entity when the limit is set to 1 (one) Spawn distance to helicopter based on type Spawned entities are now persistent at server restart Supported helicopters: MiniHelicopter AttackHelicopter TransportHelicopter Supported features (you can enable/disable them per profile): Auto hovering with PID controller stabilization (same shit used by real drones) Automatic mount the owner when the helicopter is spawned Instant takeoff will remove the engine ramping time Lock the spawned helicopter's pilot seat to the person who spawned it Remove all outside/inside decay Remove fuel consumption Spawn fuel amount Let's take the example of the following profile: { "Name": "attack", "Type": "AttackHelicopter", "CooldownInSeconds": 3600, "Distance": { "Fetch": { "Min": 50, "Max": 0 }, "Remove": { "Min": 0, "Max": 50 } }, "Settings": { "AutoHover": { "Enabled": false, "MinSpeed": 3 }, "AutoMountPlayer": false, "InstantTakeoff": false, "LockToOwner": false, "NoDecay": false, "NoFuelConsumption": false, "SpawnFuelAmount": 100 } } The plugin will automatically create for you the following commands: /myattack to spawn a minicopter /fattack to fetch a spawned minicopter /noattack to despawn a spawned minicopter The plugin will also automatically create for each command a permission, this allows fine grain control over who can execute which command. helimanager.attack.spawn helimanager.attack.fetch helimanager.attack.remove$9.99- 76 comments
- 1 review
-
- 2
-
- #mini
- #minicopter
- (and 10 more)
-
Version 1.1.1
188 downloads
SAVE 13% WHEN BUYING THE BUNDLE This plugin will allow you to run console commands at any given schedule. The syntax was inspired on the Unix's crontab format but ported to json for easy of use. Below you'll find some examples.. but sky is the limit. ┌───────────── minute (0 - 59) │ ┌───────────── hour (0 - 23) │ │ ┌───────────── day of the month (1 - 31) │ │ │ ┌───────────── month (1 - 12) │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday); │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ * * * * * <command to execute> { "Minute": "*", "Hour": "*", "Day": "*", "Month": "*", "DoW": "*", "Command": "ai.sleepwakestats" } New features "@forced" and "!forced" to be used on the Command field as conditionals: /* * > minute = 15, hour = 19, DoW = 4, command = @forced restart 60 * > minute = 15, hour = 12, DoW = 4, command = !forced restart 900 * > The special keys "@forced" and "!forced" will allow you to execute commands * > only of forced wipe days or only on non forced wipe days. This example will * > restart the server every thursday at 12:15 except forced wipe days were it * > will only execute at 19:15. */ New features "@wipe" and "!wipe" to be used on the Command field as conditionals: /* * > minute = @restart, command = @wipe my_command * > minute = @restart, command = !wipe my_other_command * > The special keys "@wipe" and "!wipe" will allow you to execute commands * > only if the map was wiped. This example will execute my_command on server * > restart if the map was wiped otherwise will execute my_other_command. */ Execute the command "ai.sleepwakestats" every 3m: { "Minute": "*/3", "Hour": "*", "Day": "*", "Month": "*", "DoW": "*", "Command": "ai.sleepwakestats" }, Execute the command "status" at 15m of every hour: { "Minute": "15", "Hour": "*", "Day": "*", "Month": "*", "DoW": "*", "Command": "status" }, Restart the server every day at 6:45: { "Minute": "45", "Hour": "6", "Day": "*", "Month": "*", "DoW": "4", "Command": "restart 60" }, Have a specific plugin running only during the weekends: { "Minute": "0", "Hour": "0", "Day": "*", "Month": "*", "DoW": "6", "Command": "oxide.load MyWeekEndPlugin" }, { "Minute": "0", "Hour": "0", "Day": "*", "Month": "*", "DoW": "1", "Command": "oxide.unload MyWeekEndPlugin" } Execute the command "oxide.version" every Tuesday between 10:15 to 10:25: { "Minute": "15-25", "Hour": "10", "Day": "*", "Month": "*", "DoW": "3", "Command": "oxide.version" } Sets the fps limit to 30 at every server restart: { "Minute": "@restart", "Hour": "*", "Day": "*", "Month": "*", "DoW": "*", "Command": "fps.limit 30" } Keeps the plugin MyWeekEndPlugin unloaded during weekend restarts: { "Minute": "@restart", "Hour": "*", "Day": "*", "Month": "*", "DoW": "1", "Command": "oxide.unload MyWeekEndPlugin" }, { "Minute": "@restart", "Hour": "*", "Day": "*", "Month": "*", "DoW": "6", "Command": "oxide.unload MyWeekEndPlugin" }$4.99 -
Version 2024.5.2.1658
331 downloads
This patch will change the procedural map generation algorithm to include the Trainyard monument and train tracks (railring) on any map size greater or equal to 3500. This works great with maps without the Giant Excavator as it provides a different way for your players to gather resources, use https://rustmaps.com/ to search for some good seeds. Tested extensively with map size 3650. This plugin manipulates the limits imposed by Facepunch for the rail ring to generate, rail rings takes a lot of map space. Monuments are placed in a certain order by the map generator, having the rail ring will ultimately mean that something will be left out due to the lack of space. We have no control over what gets culled.. so when using this plugin some seeds will work better than others. This is a standalone Harmony patch, Oxide installation is optional. Copy the Oxidation.CustomRailRingSize.dll file into your HarmonyMods folder and restart your server. What is Harmony ? Harmony is a library for patching .NET code during runtime, it directly manipulates game code (CIL) without any additional abstraction layer such as Oxide. The direct patching of the game's byte code allows more performant modding as developers no longer need to rely on third party code, events or hooks to build custom functionality.$3.99- 30 comments
- 4 reviews
-
- 2
-
- #trainyard
- #rail
-
(and 5 more)
Tagged with:
-
Version 1.5.15
1,472 downloads
SAVE 10% WHEN BUYING THE BUNDLE No oxide sh*t, fast af Now supporting electric and legacy Furnaces ! The best smelting plugin you will find, guaranteed™ Still using Quick/Power Smelt ? Well.. let me welcome you to 2023. Straightforward configuration, let's make our large furnaces x5 and refineries x2 but keep small furnaces vanilla: "Ovens": { "furnace.large": { "Multiplier": 5, "Charcoal": 5, }, "furnace": { "Multiplier": 1, "Charcoal": 1, }, "refinery_small_deployed": { "Multiplier": 2, "Charcoal": 2, } } Yeah.. all smelting plugins can do that you said ? Fair enough.. How about changing the cook time (in seconds) per item type ? "Products": { "hq.metal.ore": { "CookTime": 0.5, "Amount": 1 }, "metal.ore": { "CookTime": 10.0, "Amount": 1 }, "sulfur.ore": { "CookTime": 1.0, "Amount": 1 } } Still not impressed ? What if you'd like one metal.ore to give you 5 metal frags instead of the default 1:1 ratio ? Easy.. grab my beer. "metal.ore": { "CookTime": 10.0, "Amount": 5 }$6.99- 98 comments
- 7 reviews
-
- 9
-
Version 2024.5.2.1658
118 downloads
SAVE 10% WHEN BUYING THE BUNDLE SAVE 10% WHEN BUYING THE BUNDLE This high performance patch will allow to set custom item stacks based on: Item name Item category Blacklist items (useful when using the categories) This is a standalone Harmony patch, Oxide installation is optional. Copy the Oxidation.StackManager.dll file into your HarmonyMods folder and restart your server. At the first server start after installing the patch a new configuration file Oxidation.StackManager.X.json will be created at the HarmonyMods folder. What is Harmony ? Harmony is a library for patching .NET code during runtime, it directly manipulates game code (CIL) without any additional abstraction layer such as Oxide. The direct patching of the game's byte code allows more performant modding as developers no longer need to rely on third party code, events or hooks to build custom functionality.$4.99- 4 comments
- 2 reviews
-
- #harmony
- #oxidation
- (and 8 more)
-
Version 2024.10.3.1319
185 downloads
SAVE 10% WHEN BUYING THE BUNDLE This high performance patch will change the overall output rates of pickup, gather and quarries/excavator aka "Gather Manager". This is a standalone Harmony patch, Oxide installation is optional. Copy the Oxidation.Modded.X.dll file into your HarmonyMods folder and restart your server. At the first server start after installing the patch a new configuration file Oxidation.Modded.X.json will be created at the HarmonyMods folder. The following settings can be configured: Recycler tick rate (default: 5s) Research table speed (default: 10s) Crafting speed multiplier Vending machine buying speed Overall gather multiplier Overall pickup multiplier Overall quarry multiplier Overall excavator multiplier Overall trap multiplier It also supports setting unique output rates based on the Item's short name, example: "Excavator": { "*": 5.0, "hq.metal.ore": 1.0, "metal.ore": 2.5, "sulfur.ore": 1.0 } What is Harmony ? Harmony is a library for patching .NET code during runtime, it directly manipulates game code (CIL) without any additional abstraction layer such as Oxide. The direct patching of the game's byte code allows more performant modding as developers no longer need to rely on third party code, events or hooks to build custom functionality.$4.99- 10 comments
-
- 2
-
- #gather
- #gathering
- (and 12 more)
-
Version 1.2.2
171 downloads
No more blueprints ! Great for those crazy, heavy modded servers. You can control to which users the blueprints will be unlocked by granting the permission blueprintunlocker.tierX.unlock. If you'd like to unlock to all your players just grant the permission to the default group on the console like so: oxide.grant group default blueprintunlocker.tier0.unlock oxide.grant group default blueprintunlocker.tier1.unlock oxide.grant group default blueprintunlocker.tier2.unlock oxide.grant group default blueprintunlocker.tier3.unlock [NEW] Automatic unlock/reset based on permission: when a tier permission is assigned to a user all the bps will be unlocked when a tier permission is revoked from a user all the bps will be reset$2.99- 16 comments
- 2 reviews
-
- 1
-
- #blueprints
- #manager
-
(and 5 more)
Tagged with:
-
Version 1.0.2
489 downloads
Troll those cheaters in style with the Rocket Man ! After exploding up in the sky their loot will drop all over the place, just like a Piñata. Use the chat command /troll.rocketman <player> or the rcon command troll.rocketman <player>. The player argument will accept a partial player name or a full Steam ID. All users with the Oxide "admin" role will get access to the command, but you may grant per user/group access using the permission oxidationtrollrocketman.use.$1.99- 12 comments
- 5 reviews
-
- 1
-
- #admin
- #admintool
-
(and 5 more)
Tagged with:
-
Version 1.1.3
504 downloads
This is a dead simple light controller with little performance impact, no configuration required. All player deployed lights will get turned on at sunset and turned off at sunrise. Lights will require one unit of fuel to be powered but they will have no consumption. Currently supported entities: chineselantern.deployed jackolantern.angry jackolantern.happy lantern.deployed tunalight.deployedFree-
- 1
-
- #lighting
- #light control
-
(and 5 more)
Tagged with:
-
-
Version 1.1.1
532 downloads
HUD based alert system, no configuration required. The main objective is to broadcast an alert when important server wide events are starting, such as: Bradley event starts Cargo ship event starts Cargo plane (airdrop) event starts Patrol event starts Chinook event starts Oilrig defense Standard hackable crate drop This plugin also exposes an API which allows other plugins to use the same alert system to broadcast messages. [PluginReference] private Plugin OxidationEventAnnouncer; // (...) private void OnMyImportantEvent() { OxidationEventAnnouncer.Call("Broadcast", "My important event has started"); } You can easily change the background color and text color of the announcement. The following snippet will change the background color to #00FF00 and the text color to #F0F0F0. [PluginReference] private Plugin OxidationEventAnnouncer; // (...) private void OnMyImportantEvent() { OxidationEventAnnouncer.Call("Broadcast", "My important event has started", "#00FF00", "#F0F0F0"); }Free -
Version 1.0.8
41 downloads
Control raid protection using rcon: enable_raid: RAID is enabled, all damage is allowed disable_raid: RAID is disabled, no damage is allowed When RAID is disabled a small UI shows on the top left corner. Using a scheduler plugin like this you can disable RAID during certain periods of time. Example config for Scheduler which: Restarts the server daily Re-enables the raid protection after the restart except if the server was wiped Disables the raid protection everyday at 12:00 Enables the raid protection everyday at 00:00 except on wipe day { "UTC": true, "Cron": [ { "Minute": "@restart", "Hour": "*", "Day": "*", "Month": "*", "DoW": "*", "Command": "!wipe disable_raid" }, { "Minute": "45", "Hour": "5", "Day": "*", "Month": "*", "DoW": "*", "Command": "restart 300 \"Daily reboot\"" }, { "Minute": "0", "Hour": "0", "Day": "*", "Month": "*", "DoW": "0,2,3,4,5,6", "Command": "disable_raid" }, { "Minute": "0", "Hour": "12", "Day": "*", "Month": "*", "DoW": "*", "Command": "enable_raid" } ] }$1.99- 4 comments
-
Version 1.0.2
209 downloads
This plugins allows you to fine tune the settings about the Airdrop event such as frequency, speed, cargo drop mass and speed. To control the frequency, you can define a max and min duration between each airdrop event. If you don't want any randomization, just set the max and min with the same value. "AdditionalEvents": { "Enabled": false, "Min": 300.0, "Max": 600.0 }, The following config controls the "delay" between the start of the airdrop event (either it is server wide or called in by an user) and the drop of the cargo at the spot. In a nutshell it will make your planes fly must faster aka airspeed. "Airplane": { "Speed": { "Enabled": false, "Min": 70.0, "Max": 80.0 } }, You can change the duration of the supply signal smoke. "Signal": { "Duration": 110.0 }, Finally you can also adjust the time it takes for the dropped cargo to reach the ground by changing it's mass and drag values. "Cargo": { "Mass": { "Enabled": false, "Min": 20.0, "Max": 20.0 }, "Drag": { "Enabled": false, "Min": 2.5, "Max": 3.5 } }$2.99 -
Version 2022.9.24.1102
24 downloads
This high performance patch will make craft be instant for all your players. After installing the patch and restarting your server you need to set "craft.instant 1" to activate the instant crafting. This is a standalone Harmony patch, Oxide installation is optional. Copy the Oxidation.Instacraft.dll file into your HarmonyMods folder and restart your server. What is Harmony ? Harmony is a library for patching .NET code during runtime, it directly manipulates game code (CIL) without any additional abstraction layer such as Oxide. The direct patching of the game's byte code allows more performant modding as developers no longer need to rely on third party code, events or hooks to build custom functionality.$2.99 -
Version 1.0.0
99 downloads
No more sleeping bag cooldowns ! Great for those crazy, heavy modded servers. You can control to which users the cooldown will be removed by granting the permission OxidationNoBagCooldown.Allow. If you'd like to remove the cooldown to all your players just grant the permission to the default group on the console like so: oxide.grant group default OxidationNoBagCooldown.Allow$1.99- 1 comment
- 2 reviews
-
- 1
-
- #bag
- #sleepingbag
-
(and 4 more)
Tagged with: