Skip to content

About

vanilla private server

Topics

Resources

Stars

238 stars

Watchers

6 watching

Forks

Repository files navigation

thistle tea

Ask DeepWiki

wip vanilla private server written in elixir

contributing

i've had a lot of fun hacking on this and it would be neat if you did too

hop in the discord if you're interested in helping out

running

# the devenv shell provides elixir, a C++ toolchain, and namigator (NAMIGATOR_SRC);
# outside devenv, point NAMIGATOR_SRC at a pikdum/namigator checkout (rev in flake.lock)
git clone https://github.com/pikdum/thistle_tea.git
cd thistle_tea
mix deps.get
mix deps.compile

# need npm or bun or similar
cd assets && npm install && cd ../

# generate db/vmangos.sqlite (mobs, items, etc.)
cachix use thistle-tea
nix run .#vmangos-db -- ./db

# path to vanilla client, the directory with WoW.exe
# you'll want version 1.12.1 build 5875
# this is only for generating dbc.sqlite + maps
export WOW_DIR="/path/to/vanilla/client"

# generate db/dbc.sqlite (spell info, etc.) from the client
nix run .#dbc-db -- "$WOW_DIR" ./db

# generate navigation meshes from the client (takes a while)
nix run .#maps -- "$WOW_DIR"

# if not localhost, set GAME_SERVER:
# GAME_SERVER=192.168.1.110 iex -S mix
iex -S mix
# change server to localhost in realmlist.wtf
# default logins are in application.ex (test:test)
# also, there's a test server at 150.230.28.221

More documentation, like platform-specific setup guides, can be found in the Wiki.

Existing navigation bakes need WMO metadata for indoor and outdoor queries, WMO lava, and spell-bearing liquids. New bakes include it automatically.

Naxxramas uses the client map name Stratholme Raid. It is included in new .#maps bakes; existing installations need to generate that map before testing liquid spells.

Ocean fatigue and outdoor lava also need terrain liquid data. New map bakes include it; existing bakes can add it without rebuilding navigation:

nix run .#terrain-data -- "$WOW_DIR" ./maps/terrain

Restart the server after generating terrain data.

databases

  • vmangos.sqlite nix run .#vmangos-db -- ./db
    • generated from the pinned VMangos SQLite snapshot in flake.nix
    • this has mobs, items, etc.
  • dbc.sqlite nix run .#dbc-db -- "$WOW_DIR" ./db
    • generated from your local wow 1.12 client, since it can't be distributed
    • this has spell info and similar

upstreams (VMangos/core, mangoszero/server, gtker/wow_dbc, vdechef/mysql2sqlite, pikdum/namigator) are pinned in flake.lock; bump them with nix flake update.

individual targets if you just want the tools on PATH:

nix build .#mangos-map-extractor   # map-extractor, vmap-extractor, mmap-extractor
nix build .#wow-dbc-converter      # wow_dbc_converter
nix build .#namigator-mapbuilder   # MapBuilder (navmesh generation)
nix develop .#wow-tools            # shell with all of the above + sqlite + mariadb

what (somewhat) works

  • logging in + creating characters
  • entering world + seeing other players
  • chatting, channels, and parties
  • Meeting Stones, with class-based matchmaking, partial-party refills, innkeeper queues, native status messages, and retained solo queues across reconnect
  • Spoken languages, with learned comprehension, racial languages, Curse of Tongues, readable whispers, and immediate skill updates
  • Friends and ignore lists, with offline contacts, live presence, reconnect retention, chat filtering, and invitation restrictions
  • Raid groups, with 40-member rosters, assistants, subgroups, target markers, ready checks, raid chat, subgroup buffs, and quest eligibility
  • AFK and DND status, with public tags, whisper echoes and automatic replies, reconnect cleanup, and AFK battleground departure
  • Emotes and posture, with DBC animations, persistent poses, movement and channel interruption, and Feign Death and pet-control cleanup
  • mob spawns, combat, navigation, and respawns
  • auto-attacks + class abilities
  • Chained spells, with per-jump attenuation, spell modifiers, line of sight, injured-friendly selection, and caster bounces
  • Spell radius modifiers, with area targeting, persistent ground effects, totem inheritance, talent reset, and reconnect acceptance
  • Spell range modifiers, with unit casts, channel grace, Auto Shot, pet inheritance, and live bonus removal
  • Database-selected creature targets, with living and corpse selectors, per-effect delivery, and native quest-item acceptance
  • Scripted spell areas and configured cones, with source and destination areas, per-effect selectors, narrow and rear arcs, and native Steam Tonk acceptance
  • Scripted spell destinations, with nearby creature, corpse, and object locations, triggered delivery, and native summon placement and expiry
  • Database spell destinations, with fixed summon and ground-effect locations, world-copy isolation, and configured teleport arrival facing
  • Game-object spell targeting, with per-effect trap and quest-object recipients, owner attribution, and native linked-trap and combat lifecycle acceptance
  • Combo point builders, with Premeditation expiry, talent-generated points, finisher consumption, and single melee proc delivery
  • Avoided ability power refunds, using paid energy and rage costs across charged discounts, immunity, and queued melee attacks
  • Ownerless summoned objects, with shared loot, caster-independent lifetimes, linked objects, and environmental trap activation
  • Owned summoned objects, with independent spell slots, Hunter trap replacement, death retention, and cleanup on expiry, logout, and world departure
  • creature-specific melee and ranged attack power from slaying gear and consumables, with weapon-speed scaling and live target debuffs
  • Armor and spell penetration, with school masks, stacking, equipment bonuses, and periodic damage
  • Armor and resistance modifiers, with agility armor, base and total modifier layers, multiplicative percentages, and form and talent lifecycles
  • school-based spell cost reductions, with stacking, client cost displays, and free casts
  • percentage base-stat bonuses and penalties, including world buffs and Resurrection Sickness, with layered stacking and death-persistent aura expiry
  • independent mana and energy regeneration across Druid forms, with the five-second rule, Reflection, and Innervate
  • Shapeshift cleansing, with root and snare removal, daze exceptions, buff interruption, target restrictions, and movement acknowledgements
  • Transformation appearance, with disguise priority, model geometry, form scales, creature weapons, reconnect restoration, and Polymorph regeneration
  • ground mounts, mounted speed bonuses, and dismounting on cancellation or swimming
  • Indoor and outdoor spell rules, with WMO interiors, cast-completion checks, automatic dismounting, and terrain-sensitive form and equipment passives
  • parry haste for player and mob melee swings, including dual-wield timing
  • shield block value from equipment, enchants, and percentage talents, shared by defensive blocks and Shield Slam
  • learned parry and block capabilities, weapon and shield requirements, sheath restrictions, and defense-skill avoidance on the character sheet
  • Combat skill progression, with shared weapon bonuses, off-hand and ranged training, resolved outcome checks, and launch-time weapon attribution
  • Weapon attack accuracy, with dual-wield miss penalties, queued-attack suppression, hit scaling, PvP defense, and capped glancing adjustments
  • Weapon-dependent offensive bonuses, with per-hand hit, weapon talents and enchants, skill-derived crit displays, and filtered white-attack damage
  • Extra attacks, with pending melee batches, proc recursion guards, swing timing, combat-log feedback, and lifecycle cleanup
  • Melee readiness, with shared facing and control checks, per-hand retries, dual-wield swing separation, and native error feedback
  • Blocked-hit procs, with combined block and absorb outcomes, Retaliation, damage-shield contact rules, and incoming proc cooldowns
  • Cast-completion procs, with Elemental Focus, separate cast and hit phases, spell/ability classification, and caster-proc suppression
  • Stacking spell trinkets, with temporary spell-power snapshots, Unstable Power's diminishing bonus, Ascendance's increasing bonus, and linked aura cleanup
  • Direct damage aura procs, with Flameblade, Holy Shield, carrier attribution, inherited rank rules, and charge exhaustion
  • main-hand disarm: unarmed player combat, armed-creature damage reduction, weapon ability checks, and off-hand preservation
  • rear-hit daze from uncontrolled creatures, with level and defense-skill scaling
  • mechanic resistance for spells and melee abilities, including Orc Hardiness
  • aura-state and spell-effect immunities, with partial spell blocking, control purges, and expiry cleanup
  • school-specific damage immunity, with melee and periodic immune feedback and spell bypass attributes
  • Binary spell resistance, with all-or-nothing control spells, school penetration, full-hit damage, triggered casts, and resistance lifecycle updates
  • Triggered spell hits, with per-target hit rolls, original-caster modifiers, saved impact outcomes, channel target retention, and cancellation
  • Wounded creature movement, with low-health running penalties, pet and boss exemptions, active path retiming, snare composition, and recovery
  • periodic mana drains and life leech, with transfers limited by available mana and actual health lost
  • healing suppression and amplification across direct heals and HoTs, with strongest-effect stacking and live expiry updates
  • Absorb shield scaling, with caster healing and school power, low-rank penalties, talent ordering, depletion, and retained capacity across reconnect
  • stack-aware dispels, with partial cures, Dispel All categories, and client combat-log feedback
  • talent-based dispel resistance, including Vile Poisons, per-stack attempts, and failed-dispel feedback
  • general and school-specific spell reflection, including Sheen of Zanza's guaranteed first reflection and charge consumption
  • Grounding Totem and spell magnets, with shared interception charges, periodic protection, and totem immunity and destruction cleanup
  • spell modifiers use VMangos family masks, including all 64 bits, to affect only the intended abilities
  • stacked damage-over-time effects scale with remaining stacks after partial cures
  • exclusive resistance buffs use the strongest effect per school, with weaker protection resuming on removal
  • crowd-control diminishing returns, shared across casters with recovery after control ends
  • Slow exclusivity, with strength and duration replacement, preserved direct damage, daze coexistence, and expiry and death cleanup
  • Pacification and silence, including combined controls, attack suppression, channel interruption, and overlapping-source cleanup
  • creature and pet fear movement, with bounded panic runs, control cleanup, and Curse of Recklessness suppression
  • Critter escape behavior, with damage and debuff reactions, timed panic movement, combat recovery, and death cleanup
  • Creature combat defaults, with template immunity, invincibility, defense rules, stationary behavior, and script overrides
  • Creature-group combat, with shared aggro, evade, respawn, death notifications, scripted membership, and group conditions
  • Creature formations, with coordinated patrol movement, temporary leaders, inherited waypoint routes, and return-to-formation behavior
  • Shared creature leashes, with combat origins, assistance clocks, hostile-contact extensions, and return-home cleanup
  • Creature-owned summon clocks, with owner inheritance, idle-owner links, lethal-hit extensions, and independent lifecycle cleanup
  • Creature-owned combat pets, with a single monitored pet slot, aggressive combat, dead-pet replacement, and cleanup alongside independent guardians
  • Player fear and confusion, with forced movement, client control restoration, bounded wandering, teleport recovery, and death cleanup
  • Spell knockback, with acknowledged launches, observer movement, cast interruption, possession routing, and landing cleanup
  • Spell-driven player pulls, with ballistic trajectories, height compensation, cast interruption, acknowledged movement, and observer playback
  • Spell-driven taxi flights, with validated routes, form cleanup, accurate landing points, protected passengers, and native flight and relog acceptance
  • Taxi flight resumption, with stationary offline checkpoints, reconnect continuation, stale callback rejection, and pet restoration on landing
  • Priest Fade: temporary threat reduction with target switching and restoration on expiry
  • Rogue Distract: ground-targeted facing and timed patrol pauses, preserving stealth
  • Hunter Beast Lore: caster-specific beast damage, armor, and resistance information, with expiry and death cleanup
  • Detect Magic, with enemy buff revelation, live buff updates, and dispel, expiry, and death cleanup
  • pets
  • Hunter trap procs, with Entrapment, Frost Trap's periodic root checks, diminishing returns, talent reset, and trap activation restrictions
  • Trap detection and disarming, with hostile trap visibility, Detect Traps, safe Disarm Trap completion, and static trap respawn
  • Noncombat critter companions, with separate ownership, following, item toggles, replacement, creation passives, and lifecycle cleanup alongside combat pets
  • Autonomous guardians, with multiple summons, Engineering scaling, combat and following, creature stat buffs, and monitored lifetime cleanup alongside combat pets
  • Wild creature summons, with independent lifetimes, Target Dummy taunts and salvage, timed death and corpse cleanup, and usable Field Repair Bots
  • Hunter pet happiness: feeding, timed decay, damage tiers, death penalties, and retained state across dismissal and reconnect
  • Hunter pet experience: kill rewards, level growth, owner-level caps, and retained progress, learned abilities, and reaction stance
  • Hunter pet loyalty: happiness-based bonding, training-point earnings, rank loss, and runaway cleanup, retained through dismissal and reconnect
  • Hunter pet training: ability purchases, rank-upgrade credits, passive stat bonuses, family and level checks, and retained learned spells
  • Hunter pet stables: two purchased slots, storage and swaps, persistent pet identity, and retained health and progression
  • Hunter pet naming: one-time names, observer updates, retained identity across pet lifecycles, and abandonment cleanup
  • typed invisibility and detection, with observer visibility, creature aggro, and action interruption
  • observer-specific stealth detection, with Perception, Paranoia, Track Hidden, facing, line of sight, and caster-specific Hunter's Mark
  • items, bags, equipment, and vendors
  • Spell item transformation, with atomic same-slot replacement, retained enchants and wear, shared cooldowns, and full-inventory support
  • Vendor buyback, with 12 session slots, partial-stack sales, preserved item state, charge and durability pricing, paused timers, and logout cleanup
  • Limited vendor stock, shared between buyers at each merchant, with timed restocking, template inventories, sold-out feedback, and recoverable purchases
  • Ammunition, with client selection, compatible projectile costs, Auto Shot depletion, and thrown-stack or durability consumption
  • Wand attacks, with weapon-school damage, Wand Specialization, and shared auto-repeat timing and cancellation
  • Creature and pet attack power, with damage scaling, buff and debuff cleanup, percentage modifiers, and ranged equipment bonuses
  • Passive on-equip item spells, with crit, hit, dodge, mana regeneration, item procs, durability and reconnect lifecycles, and form restrictions
  • Learned defensive capabilities, with Shaman Parry talent learning and reset, defense skill projection, weapon requirements, sheath restrictions, and reconnect validation
  • equipment durability, combat and death wear, broken-gear penalties, and vendor repairs with reputation discounts
  • Spell-driven durability, with exact-slot and carried-gear wear, percentage damage, negative-point repairs, execution logs, and restored equipment effects
  • alcohol intoxication, client drunkenness effects, gradual sobering, and death cleanup
  • looting + group loot
  • Rogue Pick Pocket, with private loot, quest drops, and failed-attempt retaliation
  • Skinning, with corpse loot prerequisites, profession skill checks and gains, and private leather loot
  • Gathering and object locks, with Mining, Herbalism, shared key and skill requirements, repeated vein harvests, and per-spawn skill gains
  • Spell focus requirements, with forges, anvils, cooking fires, alchemy labs, native errors, and revalidation before casting costs
  • Spell-granted skill ranks, with profession starter recipes, preserved progress on rank upgrades, riding values, and abandonment cleanup
  • Teaching spells and recipe books, with recipe learning, Expert profession books, atomic consumption, cancellation, and specialization requirements
  • First Aid, with healing channels, recipient lockouts, interruption, rejected-use item preservation, and reconnect retention
  • Consumable stacking, with separate food and drink recovery, combined meals, Well Fed replacement, and exclusive vanilla flasks
  • Explicit spell stacking groups, with ordered scroll and elixir upgrades, preserved costs on rejection, named food exclusivity, and synchronized spell-damage fields
  • Inventory containers and lockboxes, with retained private loot, Pick Lock, consumable keys, atomic claims, and full-bag recovery
  • Trade-slot unlocking, with paid lockpicking, consumable keys, final requirement checks, and retry without closing the trade
  • Wrapped gifts, with atomic paper consumption, creator labels, and retained item identity, charges, and enchants through trade and opening
  • Timed items, with client countdowns, offline lifetime rules, conjured-item cleanup, and expiration across equipment, bags, and bank storage
  • Disenchanting, with exact-item consumption, private material loot, Enchanting skill gains, and recovery when bags are full
  • Permanent equipment enchants, with atomic material costs, profession skill gains, independent equipment bonuses, and weapon procs
  • Charged weapon coatings, with finite poison charges, proc chance talents, atomic application, and depletion cleanup
  • Creature-specific flat damage, including Beastslayer and Elemental Slayer enchants across weapon attacks, spells, and periodic damage
  • quests
  • Quest dependencies, with signed and alternative prerequisites, exclusive groups, chains, breadcrumbs, profession requirements, and live NPC marker refreshes
  • Seasonal quests, with world-event eligibility, live questgiver markers, stale-dialog rejection, and retained progress across event changes
  • Quest reward spells, with caster selection, hidden automatic quest rewards, and native Naxxramas attunement
  • Quest sharing, with party confirmations, eligibility feedback, inherited timers, source-item lifecycle, and stale-offer cleanup
  • Item-started quests, with owned starter validation, atomic item exchanges, retained objectives, full-bag rejection, and party confirmation
  • Quest tool targets, with creature entry and life-state restrictions, rejected-use recovery, corpse capture, and separate caster rewards
  • Game-object questgivers, with per-player activation, native quest chains, conditioned gossip, and scripted player casts
  • xp, leveling, and exploration
  • Rested experience and logout, with offline inn and wilderness gains, idle rest updates, native logout countdowns, and cancellation cleanup
  • Dungeon and raid admission, with isolated copies, raid-group requirements, map player caps, account-wide hourly entry limits, and safe login recovery
  • Instance group membership, with group copy adoption, removal countdowns, reinvite cancellation, home transfers, and safe regrouping
  • Deadmines boss doors and gunpowder cannon breach, with Smite's alarms and pirate response
  • dying + resurrecting
  • Corpse recovery, with escalating repeat-death delays, reconnect countdowns, server-enforced reclaim checks, and battleground recovery rules
  • Dungeon corpse return, with outdoor entrance markers, ghost portal restrictions, recovery into the original copy, and faction-aware graveyard selection
  • Spell resurrection, with owned-corpse targeting, cross-map offers, instance admission, recovery after travel acknowledgement, and Rebirth countdown bypass
  • Soulstones and Reincarnation, with reagent consumption, cooldowns, and talent modifiers
  • Deferred spell cooldowns, with aura and owned-object events, retained item overrides, ritual cancellation, and reconnect restoration
  • Cannibalize, with nearby corpse eligibility, triggered healing channels, damage interruption, and animation cleanup
  • Spell interrupts, with channel cleanup, school lockouts, native cooldowns and combat logs, reconnect restoration, and creature mechanic immunity
  • Creature elemental combat, with template school immunity, elemental melee, resistance and wards, Dampen Magic, and native damage-school feedback
  • Buff and debuff capacity, with priority-based replacement, separate 32-buff and 16-debuff limits, hidden aura exemptions, and shared lifecycle cleanup
  • fall damage, Safe Fall, and Slow Fall protection
  • Environmental fire damage, with world campfires, resistance, shield depletion, combat-log feedback, and death durability loss
  • underwater breath timers, drowning, water-breathing effects, and extended breath reserves
  • ocean fatigue, coastal recovery, exhaustion damage, transport protection, and graveyard rescue for ghosts
  • Lava exposure, with outdoor and WMO liquids, contact grace, fire resistance, shield depletion, and death cleanup
  • Liquid spells, with Naxxramas slime, periodic nature damage, stat penalties, exit recovery, and reconnect restoration
  • swimming speed bonuses and snare updates, synchronized with the player and nearby observers
  • gossip + trainers
  • Innkeeper home binding, with confirmation, retained home locations, Hearthstones, Astral Recall, and replacement Hearthstones
  • chests, fishing, and chairs
  • resource tracking for herbs, minerals, and treasure, with exclusive tracking modes
  • mail
  • Auction houses, with linked faction markets, neutral auctions, bids, buyout, cancellation, expiry, exact-item escrow, and recoverable mail settlement

helpful resources

About

vanilla private server

Topics

Resources

Stars

238 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages