Skip to content

Economy

Applejack's economy is unusual: there are no vendors, no banks and no market. Money enters the world on a timer and leaves it through manufacturing, taxes and mistakes.

Sources: metatables/sv_player.lua (GiveMoney, CanAfford), init.lua (the payday loop at :1412), sv_commands.lua:1097 (/manufacture), items/misc/money.lua, sh_config.lua.


1. Money

function meta:GiveMoney(amount)
    self.cider._Money = math.max(self.cider._Money + amount, 0);
    SendUserMessage("MoneyAlert", self, amount);
end

That is the whole implementation. An integer with a floor of zero. meta:CanAfford(n) is a comparison.

Note the floor: you cannot go into debt. A transaction that would take you below zero instead takes you to zero. No credit, no negative balance, no loans. Combined with the door tax (§4) this produces the framework's only forced-liquidation mechanic.

Money is not an inventory item, despite items/misc/money.lua existing — see D-12. It is replicated to the owning client as a CLASS_LONG auto-CSVar once per second, changed or not (D-11).

Setting Default
Default Money 0
Death Penalty 2% of money lost on death — marked unused

Starting with nothing is a deliberate statement about the game's difficulty curve.


2. Income

There are exactly three sources.

2.1 Salary

Set from TEAM.Salary on joining a job. GM:PlayerAdjustSalary (init.lua:711) doubles it for donators.

Paid in the payday loop to every player who is alive and not arrested. Jail costs you your wages as well as your time.

Salaries range from 75 (Rebel) to 300 (Mayor, Police Commander). See the full table in 05_TEAMS_JOBS_FACTIONS.md. The notable figure is Citizen at 200 — higher than Supplier, Arms Dealer or Black Market Dealer. Specialist jobs are not paid better; they are paid worse, and compensated with manufacturing rights.

2.2 Contraband

Every Earning Interval = 300 s, contraband entities pay their owner (init.lua:1412). The loop also warns when contraband needs refilling — printers and labs are not passive income, they need tending.

Gated by PlayerCanEarnContraband, and by config["Officials Contraband"] (default true) which lets city officials run contraband too.

Per-player caps come from GM.Config.Contraband[uid].maximum, enforced by items/base/contraband.lua through meta:AddCount / TakeCount.

2.3 Player trade

/givemoney (sv_commands.lua:521) and /dropmoney (:545), the latter spawning a physical misc/money item that anyone can pick up. There is no trade window, no escrow, no confirmation — you hand money over and trust the other party.

That is a deliberate design position: the framework does not make trade safe. Being robbed mid-deal is a valid outcome. Any new trade UI must not accidentally remove this.


3. Expenditure — manufacturing

There are no shops. /manufacture is how goods enter the world.

/manufacture <item>
  1. Resolve the item; unknown → fail.
  2. Category check — the item's category must be in the player's team's canmake list. Failure message: "Police Officers cannot manufacture Illegal Weapons!"
  3. Cooldown_NextManufactureItem = CurTime() + (5 × item.Batch). Larger batches lock you out for longer. Admins bypass it.
  4. Costitem.Cost × item.Batch, checked against CanAfford. Failure reports the exact shortfall: "You need another $340!"
  5. Optional item:canManufacture(ply) veto.
  6. Charge, then spawn the goods in the world via item:Make() at the player's eye trace — not into the inventory. A shipment is a physical crate you must then carry.
  7. item:onManufacture(ply, entity, amount) hook; the entity is registered to the player with prop protection.
  8. Notify and log to EVENT_EVENT.

Why this matters

This one command is the entire production economy, and it encodes three important rules:

  • Role monopoly. Only a Chef makes food. Only an Arms Dealer makes legal weapons. Only a Black Market Dealer makes illegal goods. This is what forces trade between players.
  • Goods are physical. A shipment appears in the world and must be transported. Supply chains have geography, and can be intercepted.
  • Batch size is a rate limit. Cost scales linearly with batch, cooldown scales linearly with batch. Bulk production is not more efficient, just less frequent.

The master plan's Phase 15 (crafting: recipes, stations, skills, failure chance, quality) is almost entirely new. What must survive from /manufacture is role monopoly, physical output, and cost/cooldown scaling with batch.


4. Taxation

Setting Default
Door Tax true
Door Tax Amount 50 per door
Maximum Doors 5
Door Cost 150

Every payday, each door holder is charged Door Tax Amount per door. If they cannot pay:

"You can't pay your taxes. Your doors were removed."

Property is repossessed. This is the only forced-liquidation mechanic in the game and it is excellent: combined with the zero floor on money, it means that going broke has a consequence beyond inconvenience. Property is a liability as well as an asset.

A player at the 5-door cap pays 250 per payday — more than a Citizen's entire salary. Owning the maximum requires an active income. Preserve this relationship when retuning.


5. Other costs

Action Cost
Buy a door 150
Sell a door refunds 50% (75)
Sell an item Refund, defaulting to Cost / 2
Advertise (/advert) 60, with a 150 s cooldown
Manufacture Cost × Batch

The consistent 50% refund across doors and items is the framework's core scarcity lever. Every reversal of a decision costs half its value. It is why inventory management matters and why the 40-unit budget bites.


6. What does not exist

Against the master plan's Phase 11:

Feature Status
Money
Salaries and payday
Taxes ✅ (door tax, with repossession)
Buying / selling ⚠️ Manufacturing and 50% item sale only — no vendors
Banks ❌ Absent. sv_container.lua's hook-resolvable contents exist specifically to make a virtual bank possible (03) — the hook was built, the bank never was.
Vendors / NPCs ❌ Absent. items/base/npc.lua exists; there is no NPC framework.
Trading ⚠️ /givemoney and /dropmoney on trust only
Licences ❌ Absent
Price configuration ⚠️ Per-item Cost in each definition; no global economy tuning

The absence of banks is the most consequential. All money is carried, all money can be taken, and there is nowhere to put it — which is entirely consistent with the framework's philosophy and should be changed only deliberately.


7. What survives

Survives: money as a floored integer with no debt; salary paid only to the living and un-jailed; donator salary multiplier; contraband as tended, interval-based income with caps; officials optionally corruptible; role-monopoly manufacturing; physical shipments spawned into the world; cost and cooldown scaling with batch size; the universal 50% refund; door tax with repossession; unprotected player-to-player trade.

Does not survive: money as a per-second unconditional broadcast; money as a pseudo-item that intercepts its own storage; prices scattered across item definitions with no global tuning surface; no economic telemetry.