Jump to content

GatherRang 1.0.1

$14.99
   (0 reviews)

2 Screenshots

  • 2.3k
  • 5
  • 76.23 kB
  • Update details
    v1.0.1
    Released
    Download size76.23 kB
    Total versions3
    Time between versions 1 day
    Typical update pace About every 244 days
    Freshness Updated yesterday

About GatherRang

GatherRang V2

Native-Style Ranged Gathering for Rust (High-Pop Optimized)

GatherRang V2 is a full rewrite designed to let players farm trees, ore nodes, and corpses using ranged weapons — while still behaving like native Rust gathering internally.

Instead of faking yields or spawning resources, V2 routes hits through Rust’s ResourceDispenser system using the same mechanics tools rely on (fraction remaining, destroy fraction, finish bonus, hotspot scaling, etc.). This keeps the system stable, consistent, and compatible with Rust’s normal gather behavior.

 

Media:

 

What Players Can Farm:

  • Trees (wood)
  • Ore Nodes (stone / metal / sulfur / HQM)
  • Animals / Corpses (flesh harvesting)
  • Charcoal farming is not part of V2 (and there are no charcoal permissions in the current build).

 

Native-Style Gather Flow:

GatherRang V2 gathers through Rust’s native dispenser calls:

  • ResourceDispenser.GiveResources(...)
  • ResourceDispenser.AssignFinishBonus(...)

 

So the plugin supports:

  • Proper dispenser depletion (fractionRemaining)
  • Correct destroy scaling (destroyFraction)
  • Optional finish bonus (config controlled)
  • Hotspot/spark scaling for nodes
  • X-marker bonus scaling for trees
  • This approach is built for long-term stability and avoids the common “fake gather” problems that desync or inflate yield.

 

Always Hit System (Permission Based):

GatherRang V2 includes two optional VIP-style permissions that force the bonus systems:

 

Always Hit “X” (Trees)

  • Permission: gatherrang.alwayshitx
  • When granted:
  • Ranged hits will always count as hitting the tree X marker
  • The plugin will spawn/maintain marker flow automatically
  • Bonus scaling applies reliably without needing perfect aim
  • Without this permission:
  • Players must hit the X marker normally

 

Always Hit Spark (Nodes)

  • Permission: gatherrang.alwayshitspark
  • When granted:
  • Ranged hits will always count as hitting the node spark
  • Spark multiplier and bonus level sound triggers apply
  • Hotspot logic stays active and consistent
  • Without this permission:
  • Players must aim for the spark like vanilla Rust

 

Permission System:

Core (Required)

  • gatherrang.use

 

Weapon-Type + Target Permissions

Trees:

  • gatherrang.bow.tree
  • gatherrang.pistol.tree
  • gatherrang.shotgun.tree
  • gatherrang.smg.tree
  • gatherrang.rifle.tree

Nodes:

  • gatherrang.bow.node
  • gatherrang.pistol.node
  • gatherrang.shotgun.node
  • gatherrang.smg.node
  • gatherrang.rifle.node

Flesh (corpses/animals):

  • gatherrang.bow.flesh
  • gatherrang.pistol.flesh
  • gatherrang.shotgun.flesh
  • gatherrang.smg.flesh
  • gatherrang.rifle.flesh

Bonus forcing:

  • gatherrang.alwayshitx
  • gatherrang.alwayshitspark

 

Player Toggle System (No Chat Spam)

GatherRang V2 does not send gather messages to chat.

  • Instead it includes a clean player toggle:
  • Command: /gather on or /gather off
  • Uses a toast notification (gametip.showtoast)
  • Player state is saved to a datafile:
  • GatherRang/PlayerToggles

So players can opt in/out without any server-wide spam.

 

Datafile-Based Farming Profiles

Gather behavior is driven by profiles stored in a datafile, not hardcoded values.

Profiles File > GatherRang/FarmProfiles >Profiles define:

  • Tree.gatherDamage
  • Ore.gatherDamage
  • Flesh.gatherDamage
  • Tree.destroyFraction
  • Ore.destroyFraction
  • Flesh.destroyFraction

Default profiles are created automatically if missing, and new defaults are merged in safely over time.

This system makes it easy for server owners to:

  • Add custom profiles
  • Fine-tune balance
  • Create tiered harvesting power (VIP)

 

Per-Weapon Profile Overrides

Each weapon group supports per-weapon overrides through config:

Config key:
"Per-Weapon Inherit Profile Overrides (shortname -> profileName)"

 

Example use cases:

  • Make rifle.ak inherit a stronger profile
  • Give a custom weapon its own harvesting profile
  • Balance specific guns differently without changing the whole weapon group

 

Config Example:

{
  "Enabled": true,
  "Enable Tree Gathering": true,
  "Enable Node Gathering": true,
  "Enable Flesh Gathering (corpses)": true,
  "Native Engine Settings": {
    "Kill Trees On Complete": false,
    "Kill Nodes On Complete": true,
    "Kill Corpses On Complete": false,
    "UseFinishBonus": true
  },
  "Weapon Group Defaults": {
    "Bow": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "Pistol": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "Shotgun": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "SMG": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    },
    "Rifle": {
      "Default Profile (name)": "Generic",
      "Override Tree.gatherDamage (-1 = inherit)": -1.0,
      "Override Ore.gatherDamage (-1 = inherit)": -1.0,
      "Override Flesh.gatherDamage (-1 = inherit)": -1.0
    }
  },
  "Weapon Groups": {
    "Bow": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "bow.hunting",
        "bow.compound",
        "crossbow",
        "minicrossbow",
        "legacy bow"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "Pistol": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "pistol.revolver",
        "pistol.semiauto",
        "pistol.python",
        "pistol.m92",
        "pistol.nailgun",
        "pistol.semiauto.a.m15",
        "pistol.prototype17"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "Shotgun": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "shotgun.pump",
        "shotgun.spas12",
        "shotgun.double",
        "shotgun.waterpipe",
        "blunderbuss",
        "krieg.shotgun",
        "shotgun.m4"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "SMG": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "smg.2",
        "smg.thompson",
        "smg.mp5",
        "t1_smg"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    },
    "Rifle": {
      "Enabled": true,
      "Weapon Shortnames (exact item shortname)": [
        "rifle.ak",
        "rifle.ak.diver",
        "rifle.ak.ice",
        "rifle.ak.jungle",
        "rifle.ak.med",
        "rifle.sks",
        "rifle.lr300",
        "rifle.lr300.space",
        "rifle.bolt",
        "rifle.l96",
        "rifle.m39",
        "rifle.semiauto",
        "lmg.m249",
        "hmlmg",
        "minigun"
      ],
      "Per-Weapon Inherit Profile Overrides (shortname -> profileName)": {}
    }
  },
  "Debug Enabled": false
}



Profile Datafile Example:
 

{
  "Rock": {
    "Tree.gatherDamage": 10.0,
    "Ore.gatherDamage": 5.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.5,
    "Ore.destroyFraction": 0.5,
    "Flesh.destroyFraction": 0.5
  },
  "BoneClub": {
    "Tree.gatherDamage": 9.0,
    "Ore.gatherDamage": 4.0,
    "Flesh.gatherDamage": 5.0,
    "Tree.destroyFraction": 0.4,
    "Ore.destroyFraction": 0.4,
    "Flesh.destroyFraction": 0.5
  },
  "BoneKnife": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "StonePickaxe": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 16.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.15,
    "Flesh.destroyFraction": 0.2
  },
  "StoneHatchet": {
    "Tree.gatherDamage": 20.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.15,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.334
  },
  "SalvagedCleaver": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "VampireStake": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 30.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "BaseballBat": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "Hatchet": {
    "Tree.gatherDamage": 30.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 12.0,
    "Tree.destroyFraction": 0.1,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "Pickaxe": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 30.0,
    "Flesh.gatherDamage": 5.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.6
  },
  "SalvagedAxe": {
    "Tree.gatherDamage": 50.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 15.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "SalvagedIcepick": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 50.0,
    "Flesh.gatherDamage": 5.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.2
  },
  "Jackhammer": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 25.0,
    "Flesh.gatherDamage": 5.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.2
  },
  "Chainsaw": {
    "Tree.gatherDamage": 30.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 2.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.5,
    "Flesh.destroyFraction": 0.25
  },
  "SalvagedHammer": {
    "Tree.gatherDamage": 20.0,
    "Ore.gatherDamage": 20.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.2,
    "Ore.destroyFraction": 0.2,
    "Flesh.destroyFraction": 0.6
  },
  "ButcherKnife": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 18.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "CombatKnife": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 20.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "Longsword": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "SalvagedSword": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "SkinningKnife": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 18.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  },
  "Machete": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "KriegChainsword": {
    "Tree.gatherDamage": 30.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 2.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.5,
    "Flesh.destroyFraction": 0.25
  },
  "Mace": {
    "Tree.gatherDamage": 0.0,
    "Ore.gatherDamage": 0.0,
    "Flesh.gatherDamage": 10.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.1
  },
  "Generic": {
    "Tree.gatherDamage": 25.0,
    "Ore.gatherDamage": 25.0,
    "Flesh.gatherDamage": 12.0,
    "Tree.destroyFraction": 0.0,
    "Ore.destroyFraction": 0.0,
    "Flesh.destroyFraction": 0.0
  }
}

 

 

High-Pop Optimized

  • V2 is built for performance:
  • Permission bitmask caching per player
  • Weapon group lookup cache
  • TreeMarkerData prefab cache
  • Proper NetID cleanup in OnEntityKill
  • Uses Subscribe/Unsubscribe to avoid idle overhead when disabled
  • Minimal allocations and safe NextTick usage
  • Designed to run smoothly on high population servers with constant farming activity.

 

 

Plugins by Duff
Discord: https://discord.gg/2KBPH7hXb7

 


User Feedback

2.3m

Downloads

Total number of downloads.

10.5k

Customers

Total customers served.

152.2k

Files Sold

Total number of files sold.

3.2m

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.