GithubHelp home page GithubHelp logo

jpw1991 / chebs-necromancy Goto Github PK

View Code? Open in Web Editor NEW
10.0 3.0 4.0 766.38 MB

Cheb's Necromancy adds Necromancy to Valheim via craftable wands and structures. Minions will follow you, guard your base, and perform menial tasks.

License: The Unlicense

C# 95.38% PowerShell 2.28% Python 1.11% Shell 1.23%
mod valheim valheim-mod

chebs-necromancy's Introduction

Cheb's Necromancy

Cheb's Necromancy adds Necromancy to Valheim via craftable wands and structures. Minions will follow you, guard your base, and perform menial tasks like woodcutting, farming, mining.

Confused? Try the wiki.

About Me

image1 image2 image3

I'm a YouTuber/Game Developer/Modder who is interested in all things necromancy and minion-related. Please check out my YouTube channel and if you like the work I do and want to give back, please consider supporting me on Patreon or throwing me a dime on Ko-fi. You can also check out my website where I host information on all known necromancy mods, games, books, videos and also some written reviews/guides.

Thank you and I hope you enjoy the mod! If you have questions or need help ask me on Discord.

Bisect Hosting

I'm partnered with Bisect Hosting to give you a discount when you use promocode chebgonaz.

bisectbanner

Reporting Bugs & Requesting Features

If you would like to report a bug or request a feature, the best way to do it (in order from most preferable to least preferable) is:

a) Create an issue on my GitHub.

b) Write to me on Discord.

c) Write a comment on the Nexus page.

Requirements

  • Valheim
  • BepInEx
  • Jotunn

Installation (manual)

  • Drag the contents of the plugins folder from inside the archive to your BepInEx plugins folder in the Valheim directory.

Cheb's Valheim Library

Cheb's Valheim Library (CVL) is a DLL that contains shared code across my mods. For example, both skeletons from Cheb's Necromancy and mercenaries from Cheb's Mercenaries inherit the ChebGonazMinion type from CVL. This permits mercenaries to be commanded by a wand, and vice versa.

My mods are bundled with the latest CVL at the time of their release, but if you want to upgrade, you can get the newest CVL here.

Features

Detailed info in the wiki. Here's the short version:

  • Almost everything is configurable. Minions too weak/overpowered? Tweak them.
  • Player vs Player (PvP) settings can be configured as of 4.5.0.
  • As of 4.6.0, further minion appearance customization options are available. You can change the eye color of your minions and also give them special symbols on their capes. And in 4.7.0 you can change the bone color of skeletons too.
  • Craftable items at the workbench and forge:
    • Skeleton Wand: Summons skeleton warriors, archers, miners, and woodcutters.
    • Draugr Wand: Summons draugr warriors and archers.
    • Orb of Beckoning Summons skeleton mages and can be thrown to direct minions to go somewhere. It also sticks to enemies so that minions will chase after an enemy.
    • Spectral Shroud: A cloak that increases your Necromancy level, looks cool, and attracts spirits to it. If you're powerful enough, they will serve.
    • Necromancer Hood: A cool hood to match the cloak.
    • Necromancer's Backpack: An optional integration with AdventureBackpacks (Nexus, Thunderstore), which offers a Necromancy backpack that doubles as a Spectral Shroud.
  • While holding a Skeleton Wand, Draugr Wand, or Orb of Beckoning you can control the minions:
    • B will make a minion.
    • H will cycle minion types (eg. switch from Warrior to Archer) created by B.
    • F will make all nearby minions follow you.
    • T will make all nearby minions wait.
    • Shift+T will make minions roam.
    • G will teleport all following minions to your position (useful if stuck or to get them on boats)
  • A new Necromancy Skill which increases the quality of your minions and allows you to upgrade them.
  • Minion health increases with Necromancy level.
  • Minions ignore collision with the player so you won't be trapped.
  • Minions do not deal damage to player structures and are not affected by sharpened stakes.
  • Minions remember who created them and cannot be commanded by other players.
  • Upgrades: Having additional items in your inventory when you summon can create an upgraded version of a minion. As a safety measure to prevent you from accidentally consuming stuff, hold Left Shift when creating a minion to permit these resources to be consumed (or set to None in the config if you want no checking whatsoever):
    • Boar scraps, Deer Hide, Scale Hide -> leather armor
    • Troll Hide -> Troll armor
    • Wolf Pelt -> Wolf armor
    • Lox Pelt -> Lox armor
    • Bronze -> Bronze armor
    • Iron -> Iron armor
    • Black Metal -> Black Iron armor
  • Some minions require more than bones:
    • Guck -> poison skeleton
    • Surtling core -> skeleton mage
    • Flint -> skeleton lumberjack
    • Hard Antler -> Skeleton Miner
  • New craftable structures:
    • Neckro Pylon: Spawns undead Neckro Gatherers from Neck Tails. These have a container on its back and wander around gathering up items for you. It's like a walking vacuum cleaner. When full, the Neckro will find a nearby container and dump the items inside.
    • Refueler Pylon: Fills your smelters with ores/coal; kilns with wood; fireplaces with wood and meat; and torches etc. with resin, guck, eyeballs, whatever.
    • Bat Beacon: Spawns bats to defend your base.
    • Spirit Pylon: Spawns spirits to defend your base.
    • Farming Pylon: Automatically harvests your crops. Combine with Seed Totem (Nexus, Thunderstore) to then automatically replant those seeds for an automated base.
    • Repair Pylon: Consumes resin to repair your structures.
    • Treasure Pylon: Organizes your chests in a rather chaotic way. By default only works on the basic wooden boxes but can be told to sort other things too via config. The idea is that Neckros haul all this stuff back, then the Treasure Pylon organizes it.
    • Phylactery: The player who creates the phylactery will be saved from death by being teleported to the phylactery rather than killed. Each rescue costs one dragon egg and if there are no dragon eggs loaded into the phylactery, then the player will die normally.

Config

Attention: To edit the config as described, the Configuration Manager is the most user friendly way. This is a separate mod. Please download and install it.

Press F1 to open the mod's configuration panel.

You can also edit the configs manually. Almost everything can be tweaked to your liking. For a complete list of all configuration options, please look here.

Known issues

  • Players with Radeon cards may experience weird issues. I don't know what's causing it, but it's linked to the particle effects. You can switch them off by turning RadeonFriendly = true in the config.

Known Incompatibilities

  • Soft incompatibility with slope combat fix because it can mess up worker minion aiming. Not a big deal - especially if you never use miners/woodcutters. As an alternative, you may consider Slope Combat Assistance because it only affects the player.
  • Soft incompatibility with Ward is Love because it will identify workers as enemies and yeet them. As an alternative, you may consider using Better Wards.
  • Soft incompatibility with Item Drawers Mod because the Neckro Gatherers try to pick the items out of the drawers.

Source

You can find the github here.

Special Thanks

A special thanks to the people who've helped me along the way:

  • Developers
    • Dracbjorn - Extensive work on the configuration files & parsing (including server-sync); general help & testing.
    • CW-Jesse - Refinements and improvements on networking code and minion AI; general help & testing.
    • WalterWillis - Improvements to Treasure Pylon & Testing.
    • jneb802 - Finding and fixing a wrongly named sprite.
  • Artists
  • Translations
    • S970X - German language localization.
    • hanawa07 - Korean language localization.
    • 007LEXX - Russian language localization.
    • JamDad - French language localization.
  • Other
    • Hugo the Dwarf and Pfhoenix for advice and help for fixing the frozen minions problem.
    • Vapok and jdalfonso4341 for help with Adventure Backpacks integration.
    • redseiko for helpful advice on the official Valheim modding Discord.
    • Jetbrains for kindly providing me with an Open Source Development license for their Rider product which makes development on this project smooth and easy.

Rider logo.

Changelog

2024
Date Version Notes
10/08/2024 5.0.1 Fix phylactery error; fix mages having no attack
29/09/2024 5.0.0 Overhaul of asset bundle and aesthetics
28/06/2024 4.11.0 Go through the bundle with a fine toothed comb and optimize everything; replace Neckro Gatherer crate texture; add message to Neckro pylon informing player of what it's currently doing
10/06/2024 4.10.3 Update Jotunn; Add soft dependency on Cheb's Mercenaries to ensure that mercenaries is always loaded before Necromancy. This fixes odd errors related to wrong load orders
16/05/2024 4.10.2 Fix problem of spirit pylon ghost not spawning
15/05/2024 4.10.1 Fix incorrect RPC names eg. AddFuel -> RPC_AddFuel
25/04/2024 4.10.0 Prepare for ashlands; upgrade CVL
28/01/2024 4.9.1 Reduce logging in case of missing bone color data
27/01/2024 4.9.0 Add different healing levels & spells to the priests; fix a bug that erased some default equipment set in Unity
25/01/2024 4.8.0 Add skeleton priest to heal other minions
25/01/2024 4.7.2 Add tweakable skeleton bone colors
18/01/2024 4.6.1 Fix problem of custom eye color not being applied to freshly created minions
17/01/2024 4.6.0 Changing minion eye color added; changing minion cape emblems updates dynamically
07/01/2024 4.5.0 PvP with friends as exceptions implemented via console commands.
2023
Date Version Notes
22/12/2023 4.4.2 Permit PvP - if enabled, minions will attack players and creatures that are not their owner.
29/11/2023 4.4.1 Fix issue of configs not syncing reliably
22/11/2023 4.4.0 Fix problem of phylactery not reliably working by overhauling its checking mechanism to be done via RPCs between server and client.
10/10/2023 4.3.2 hildr's request changed Text to TextMeshProUGUI (the new Unity UI text), which broke the wand keyhints. This is now fixed
07/10/2023 4.3.1 add custom two-sided shader that was missing from chebgonaz bundle which caused a pink wand
06/10/2023 4.3.0 update for hildr's request; fix issue related to bat icon
23/08/2023 4.2.0 update for new valheim patch
02/08/2023 4.1.1 strengthen null checks in Phylactery patch
30/07/2023 4.1.0 add phylactery that consumes dragon eggs when you die and teleports you back to its location
28/07/2023 4.0.0 Workers should behave more realistically with gradual destruction of rocks, trees, etc.
23/07/2023 3.7.1 Fix problem where the minion state wasn't getting localized in the hover text
22/07/2023 3.7.0 Remove configurable Neckro Gatherer container size because containers have not been configurable since 3.3.1 (it resulted in a bug - see issue 100 on GitHub); add Russian translation
21/07/2023 3.6.2 fix bug where onePerPlayer was set to true for character drops, which would result in incorrect resource amounts getting refunded
20/07/2023 3.6.1 Add config option to make draugr quiet; update CVL to 2.1.1
13/07/2023 3.6.0 Try to make workers behave better; update CVL to 2.1.0 to prepare for upcoming changes
21/06/2023 3.5.2 Treasure pylon checks that Piece is not null before processing container
16/06/2023 3.5.1 Option to toggle smoke effects off wraiths (some players getting blinded out here)
12/06/2023 3.5.0 Update for new Valheim version
24/05/2023 3.3.2 Functions created in 3.3.0 moved into Cheb's Valheim Library for Cheb's Mercenaries
24/05/2023 3.3.1 Come up with a solution for issue 100 by removing ability to set custom container sizes.
18/05/2023 3.2.3 Extra safe-guarding against null objects on m_piece and GetInventory when Neckro Gatherer is attempting to find containers. These things shouldn't ever be null as far as I understand - but other mods can do wild things apparently.
16/05/2023 3.3.0 Make Orb behave like modern wands; Permit alternative materials for minion making via piping
12/05/2023 3.2.2 Configurable item cost for Neckro Gatherers
11/05/2023 3.2.1 Unbundle DLL to fix bug of wands not working; ignore collision with carts
02/05/2023 3.2.0 Commandable workers; If a woodcutter is swinging, but missing, the damage gets dealt anyway; remove tooltier stuff for simplicity and streamlining. People can use 3rd party item-alteration mods instead
21/04/2023 3.1.0 Battle Neckro and possible fix to frozen minions
17/04/2023 3.0.7 Cycling minion selection for greater control
13/04/2023 3.0.6 fix Farming Pylon to no longer say Armor stand on hover text; merge ChebsValheimLibrary.dll into ChebsNecromancy.dll for user convenience
11/04/2023 3.0.5 add container whitelist to Neckros & limit their selection to just player made containers
11/04/2023 3.0.4 upgrade ChebsValheimLib to 1.0.1 to fix ToolTier
09/04/2023 3.0.1 Refactor to be compatible with Cheb's Mercenaries; bug fixes
05/04/2023 2.5.15 Miners prioritize copper, silver, and tin over rocks
05/04/2023 2.5.14 Fix bug where bones get consumed even when not enough are in the inventory; fix config descriptions
31/03/2023 2.5.13 Character.m_tamed is also checked when looking for hostiles so that things like tamed animals aren't detected; Configurable teleport durability cost & cooldown
28/03/2023 2.5.11 don't log error if NPC is using the Orb of Beckoning
28/03/2023 2.5.10 improve repair pylon behaviour; upgrade to jotunn 1.11.2; make neckro update more null resistant
27/03/2023 2.5.9 fix a null object exception for structure friendly-fire code; ships ignore minion impact damage; fix problem of duplicate resource drops on death if crate is enabled
25/03/2023 2.5.8 miners pop an entire rock/node in one whack because completely mining the fragments seems impossible
25/03/2023 2.5.7 permit multiple miners to whack same rock; overhaul rock whacking logic for lumberjacks and miners; remove collision on draugr heads
23/03/2023 2.5.6 make miners lerp as they mine so that they have increased odds of being able to connect a blow with a stone; fix null object
23/03/2023 2.5.5 pylons suspend their work while players are sleeping
23/03/2023 2.5.4 Neckros return home before searching for containers
23/03/2023 2.5.3 whitelist for treasure pylon container access
22/03/2023 2.5.2 fix dumb exception
22/03/2023 2.5.0 treasure pylon
21/03/2023 2.4.4 optimize workers by staggering update intervals (50 Neckros/lumberjacks/miners no longer attempt to scan at the same time); add custom cape emblems for armored skeletons; add wolf, lox and troll leather armor varieties
16/03/2023 2.3.11 repair pylon consumes resin more intelligently; repair pylon permits multiple customizable fuel types
15/03/2023 2.3.10 implement maximum time allowed between dropoffs for Neckros
14/03/2023 2.3.9 upgrade jotunn; mess with references; fix logic error
14/03/2023 2.3.8 combine crates to reduce pollution
13/03/2023 2.3.7 forget position of current enemy so they don't start chasing after it after teleporting
13/03/2023 2.3.6 even if disabled still load assets from asset bundle
11/03/2023 2.3.5 guardian wraith shouldn't drop fragments anymore
11/03/2023 2.3.4 fix possible null object
08/03/2023 2.3.3 improve miner/woodcutter
08/03/2023 2.3.2 hitting minions with wand dismisses them; add leeches as summon to orb; neckro hivemind; refactor count code; slight speed increase by not searching parents for ZNetView; fixed performance drop for new Miners and Woodcutters after game has been running for a while
03/03/2023 2.2.3 Hotfix Neckro null object
03/03/2023 2.2.2 Remove unnecessary attack collider on Spirit Pylon Ghosts that was causing unwanted collisions with player; if Neckros don't see any other items to pick up, they can return their inventories before they're full
02/03/2023 2.2.1 Add CW-Jesse's network optimization for Neckros
02/03/2023 2.2.0 Add Repair pylon
02/03/2023 2.1.2 Add delay to Neckros before they pick up an item; make Neckros pick up items one by one
01/03/2023 2.1.1 Add bonus minions for necromancy level if configured to use limits
28/02/2023 2.1.0 Add porcupine skeleton & draugr warriors; add fire, frost, silver, and poison arrow skeletons; only following skeletons respond to the wand's wait command; armor materials consumed in order of best to worst
28/02/2023 2.0.8 Fix a problem where recipes for items and structures wouldn't sync with server
27/02/2023 2.0.5 Neckro only says it's picking up items that it actually successfully picks up, rather than all candidates
26/02/2023 2.0.4 Fix bug in Neckro where the remainder of an item stack could get deleted if not fully deposited
25/02/2023 2.0.2 Fix worker skeletons
25/02/2023 2.0.1 Fix poison skeleton
25/02/2023 2.0.0 Big refactor & reorganization of things
24/02/2023 1.9.2 fix issue about wand not commanding minions to follow reliably if they're roaming; include item layer when matching Pieceables for Farming Pylon; general code refactor/clean; Refactor harmony patches to be more friendly to other mods
23/02/2023 1.9.1 Change some Prefix patches to Postfix for better mod compatibility
22/02/2023 1.9.0 Add Farming Pylon; Add miner skeleton; Fix rare null object in Neckro update function
21/02/2023 1.8.8 Add owner name and status to minion hover text
20/02/2023 1.8.7 configurable bones drop chance; configurable follow distance and run distance; archers now cost arrows
19/02/2023 1.8.6 Support for Adventure Backpacks by Vapok.
16/02/2023 1.8.4 Add optional Radeon Friendly switch to the config which disables all effects to permit Radeon users to play without graphical glitches.
15/02/2023 1.8.2 Skeleton woodcutters can be crafted using flint; Refueler pylon optimized and can now also cook
14/02/2023 1.8.1 Skeleton woodcutters added
12/02/2023 1.8.0 Orb of Beckoning working; remove old attack target code from wand
12/02/2023 1.7.9 Fix bug that caused coroutines to occur twice on pylons - resulting in performance impacts and limits bypass.
11/02/2023 1.7.7 Neckro pylons only spawn neckros if a player is nearby and that player takes ownership of the Neckro; fix bug that permitted non-admins to use some commands; optimise draugr & skeleton Awake scaling
10/02/2023 1.7.6 Dracbjorn's config overhaul; optimise imports
09/02/2023 1.7.5 Neckro messages hideable; Neckro messages improved
07/02/2023 1.7.4 refueler pylons can now refuel fireplaces eg. torches, bonfires, etc.
06/02/2023 1.7.3 minions remember if they were following a player after player logs off, then continue following when player returns
05/02/2023 1.7.2 allow minions to roam when holding shift+T; fix bug in ZDO comparison
05/02/2023 1.7.1 allow admins to ignore ownership with commands; fix bug where players wouldnt be found by command; lint the entire project; catch and fix a few instances of MonoBehaviours accidently being instantiated with new -> a big no-no
03/02/2023 1.7.0 minions now remember the necromancy level with which they're created and scale to that; refactor SkeletonWand and DraugrWand code to be more uniform to make diffing easier; fix a bug where minions set to follow automatically would have bugged AI with the 1.6.4 improvements; minion commandability exposed to config; commands issued via E also update ZDO; hover text for interact patched
01/02/2023 1.6.4 minions can be configured to drop their crafting requirements on death; hold position now works in that minions no longer wander around; wait positions are now recorded and stored so that minions return to where they were last waiting after chasing something off
28/01/2023 1.6.3 add optional timer to kill any minion after X seconds; overhaul minion ownership checks to accurately store and retrieve the minion's creator; minions will only obey commands from their creators and ignore others
24/01/2023 1.6.2 minions can be told to follow/wait using E on them; neckros can be killed via terminal command - butcher's knife won't work on them, even with Tameable component added, due to their Container component
20/01/2023 1.6.1 Fix a problem where the Neckro Gatherer could delete items without storing them if its inventory size is set very small like 1x1
17/01/2023 1.6.0 Tier 3 skeleton mages now throw goblin fireballs; poison skeletons have damage tiers and equipment options; add optional durability damage from making minions
16/01/2023 1.5.1 rename to Cheb's Necromancy. No additional changes.
13/01/2023 1.5.1 tone logging down a bit; fix string name on neckro pylon
12/01/2023 1.5.0 add refueler pylon that puts coal into nearby smelters; fix pylons to face toward their Z axis (it was backwards before); add neckro gatherer pylon; neckros gain 150hp and can't attack; neckros no longer afraid of fire; update icons with brilliant designs by Ramblez; finally fix transparency issue
11/01/2023 1.4.3 item and structure recipes exposed to config file; defensive spikes (standard & dverger) no longer damage minions if they've been placed by the player; add chebgonaz_prerelease_spawnneckro command to let players test with new neckro gatherer.
09/01/2023 1.4.2 Neckro Gatherer now brings items back to empty containers and stores them
09/01/2023 1.4.1 Fix minions not remembering their armor values
09/01/2023 1.4.0 Minions no longer damage player structures; armor values actually applied to skeletons (although not remembered on logoff/login again - will fix soon); add necroneck gatherer
07/01/2023 1.3.0 Add server sync so that clients must use the configuration options of the server
07/01/2023 1.2.1 Add black iron armor; permit skeletons to use black iron armor; rebalance spirit pylon by introducing a delay and a limit (both configurable)
06/01/2023 1.2.0 Fix bug of skeletons not remembering their weapons properly; fix problem of tier 3 melee weapon not being stronger than tier 2; add debug commands for players to kill all their skeletons or summon them all
05/01/2023 1.1.1 Add left shift as key to unlock extra resource consumption; allow deer hide to be used for leather armor skeletons
04/01/2023 1.1.0 Armored Skeletons and Skeleton Mages!
02/01/2023 1.0.25 Fix bug where Poison Skeleton's HP is lower than it should be after leaving area and coming back
02/01/2023 1.0.24 Add Poison Skeleton (requires Guck in inventory); Guardian Wraith despawns when entering portal; Alert range of all entities raised to 30
2022
Date Version Notes
30/12/2022 1.0.23 Guardian Wraith implementation changed: Guardian Wraiths only spawn if enemies are nearby and move immediately to intercept enemy; Guardian Wraiths exist on a timer and perish on their own
29/12/2022 1.0.22 add neck tail to draugr meat; expose ghost timer to config; fix ghost selfdestruct by changing from coroutine to update; add localizations; fix problem with limits not working properly; setting buttons to None in config removes them from GUI
25/12/2022 1.0.21 Fix bug about Spirit Pylon Ghosts not despawning
25/12/2022 1.0.20 Add optional equipment effects; add Necromancer's Hood; permit omission of creatures completely via config
20/12/2022 1.0.19 Max HP of minions is now remembered; Add code to make someone only able to command minions they created; in limit mode, existing minions replaced rather showing a msg
16/12/2022 1.0.17 Nice models for the wands; skeleton equipment and damage scales to necromancy level; nice texture for Spectral Shroud; add config option to disable Guardian Wraith (permits purely cosmetic Spectral Shroud); made draugr optionally cost meat as well as bone fragments to create
12/12/2022 1.0.16 Remove version check that kept annoying people; fix Guardian Wraith bug introduced in 1.0.15
09/12/2022 1.0.15 Cleaned out and fixed up config (it contained one error); allow enabling/disabling of individual features (user request); add German localizations by S970X; fix a problem where minions beyond the follow radius could still follow the player
09/12/2022 1.0.14 Rebalanced skeleton health modifiers
07/12/2022 1.0.13 Add Spirit Pylon for static base defence; add optional minion limits for those who wish it; change skeleton eyes to blue to differentiate from deadraiser (pink) and enemy (red).
05/12/2022 1.0.12 Add Vulkan support for Linux
03/12/2022 1.0.11 Fix more shaders; add Spectral Shroud -> wraiths only summon when you wear it, and get dismissed when you take it off; removed drops from minions
03/12/2022 1.0.10 Implement fix for Thunderstore Mod Manager that (hopefully) permits it to install correctly.
02/12/2022 1.0.9 Fix some shaders that got messed up (white squares instead of particles on effects like arrow hit); allow minions to generate a little Necromancy XP for their master; fixed a null object exception in Guardian Wraith coroutine
01/12/2022 1.0.8 Big Overhaul โ†’ Fully custom prefabs used for minions results in finer control: no more Blood Magic experience; removes randomness of the skeletons so you can choose warrior/archer; permits me to add draugr and wraiths that are not hostile when you log back in; permits me to (in the future) give custom equipment and textures/materials to the minions.
29/11/2022 1.0.7 Add Guardian Wraith; ignore minion collision on player
27/11/2022 1.0.6 Function added to teleport minions to you and to tell minions to attack what you're looking at.
27/11/2022 1.0.5 Fixed a bug where after logging out and coming back in your skeletons wouldn't respond to commands anymore
27/11/2022 1.0.4 Amount of bone fragments dropped by creatures exposed to config file; fixed a bug where at necromancy level 0 a skeleton spawned would instantly die
26/11/2022 1.0.3 Default skeleton health multiplier jacked up to 15.
26/11/2022 1.0.2 All creatures drop bone fragments, skeletons can be told to follow/wait, skeletons health scales with necromancy level.
25/11/2022 1.0.1 Fix a bug that let you create skeletons without the wand equipped.
25/11/2022 1.0.0 Release

chebs-necromancy's People

Contributors

cw-jesse avatar dracbjorn avatar jneb802 avatar jpw1991 avatar walterwillis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

chebs-necromancy's Issues

implement server sync

Dracbjorn has kindly offered to implement server sync for the project so that important configuration options like minion limits, costs, etc. are controlled by the server and not the client.

black iron armor for skeletons

Add the option for skeletons to be created with Black Metal Ingots. I have an endless amount of these lying around thanks to killing goblins, so why not deck the skeletons out in some cool custom armor?

skeleton harvesters

Description

As part of my dream to have an automated base, I want to be able to create skeletons with tools that can cut down trees, mine rocks, etc.

Pylon tier

just add different pylon like a tier 1 tier 2 that u make with different mats while progressing in the game so with better mat u make better pylon stronger

neckro gatherer deletes/loses items if container size is set very small like 1x1

Describe the bug
Neckro gatherer deletes/loses items if container size is set very small like 1x1

To Reproduce

  • set container size to 1x1
  • rapidly drop different items onto neckro
  • some get stored, others go missing

Expected behavior

  • Neckro should only pick up what it can carry and leave others. Nothing should go missing

Implement hold position

Implement an actual hold position where the skeletons won't budge from their location

Additional thoughts/considerations:

  • I think custom AI is maybe the best way because otherwise we gotta rely on a hack like telling them to follow an invisible object which isn't the worst of solutions, but could lead to weird issues. Like imagine the invisible object falls off a boat and into the ocean
  • and we'd need some kind of clean up in place to remove those objects if nothing is following them, and also they'd need to persist between multiplayer sessions
  • skeletons would also likely have to remember that they are following it because when you log out, they tend to forget what they were following
  • so eh... kinda unhappy with any kind of "hack" due to these extra potential issues. It might be indeed better to just copy the MonsterAI, find out which code is responsible for their wandering behavior, and snip it out so they remain stationary unless chasing something
    or maybe they need to return to where they were waiting after something gets too far away. We need to define exact behaviors - to be honest

new minion: gatherer

Description

A minion that walks around like a vacuum cleaner, picking up all kinds of items lying everywhere.

Solutions

  • a minion that has an attached container
  • as it just roams around, it picks stuff up off the floor and stores it
  • minion can be accessed like any container
  • minion drops items in a crate when killed (like a boat)

logging too aggressive

Description

Logging is too aggressive in general. Especially with the refueler pylon.

new structure: bat tower

Description

Functions a bit like the spirit pylon, but instead of spawning ghosts, it spawns player-aligned bats. This type of structure will be especially useful on boats, for defending vs sea serpents and attackers on the shore, but also in places like the mountains to attack and intercept drakes.

new minion: undead goblin torch refueler

Description

Undead goblin torch refueler: wanders around refueling torches, fires, etc. with wood/resin

Requirements

  • Draugr Wand
  • Goblin Trophy
  • Surtling Core
  • Bone fragments

Recipe for craftable player black iron armor

Description

Adding the black iron armor for skeletons in issue #7 puts black iron armor into the game, but players can't get it and wear it without going to the console and spawning it in. It'd be nice if the recipe could be added so that they can craft it and wear it too.

Info

To learn how to add recipes for an existing item read here. You can also look at how I add the Skeleton Wand and Draugr Wand which might be even more useful.

Prefabs will be included within the chebgonaz bundle and already loaded, so the recipe should be all that's needed. Prefab names:

  • ChebGonaz_ArmorBlackIronChest
  • ChebGonaz_ArmorBlackIronLegs
  • ChebGonaz_HelmetBlackIron

Attention

  • Depends on #7 being completed first.
  • Do not use the ChebGonaz_HelmetBlackIronSkeleton prefab. Helmets for players are smaller at 0.085 scale, whereas skeletons have a larger dome and need a helmet scaled to 0.11. This will look goofy on players.

idea: creating minions causes wand durability damage

Description

Right now upgrading the wands confers no advantage. A durability increase is pretty meaningless for an item like this. So, what if the act of creating minions costs a little durability? That way upgrading the wands is meaningful and also means a wand can't be used forever. Backup wands might be needed on a voyage.

Thoughts?

Attention: this should be togglable in config if implemented because repairing things can frustrate some players.

gatherer improvements

The gatherer minion in #28 is a great lil guy but would really benefit from some extra features:

  1. He needs to actively seek items out rather than blindly wander
  2. He might benefit from a map marker
  3. He needs to know when he's full and then return to a drop off point and unload

add frost resistance to the spectral shroud

Description

People have requested, now and in the past, that the Spectral Shroud gets frost resistance so it can be used instead of a fur cloak in the mountains.

Workaround: wear silver armor

Approach

Figure out how frost resistance is granted by frost resistant items and apply it to the cloak. It doesn't seem to be a Set Effect or a property on the item itself. Not really sure how it happens but it surely has something to do with the SE_Frost effect which is responsible for damaging the player

expose quality ranges to config

Quality (how many stars a creature has) is currently hardcoded to necromancy level:

int quality = 1;
if (playerNecromancyLevel >= 70) { quality = 3; }
else if (playerNecromancyLevel >= 35) { quality = 2; }

To permit greater user control, we should expose these ranges to the config.

Places to check:

  1. Skeleton Wand
  2. Draugr Wand
  3. Guardian Wraith
  4. Spirit Pylon
  5. Possibly elsewhere - anywhere a minion is instantiated

Expose item recipes to json

Description

Right now the recipes for items like wands are hard coded:

                config.CraftingStation = "piece_workbench";
                config.AddRequirement(new RequirementConfig("Wood", 5));

but it is possible to expose them as JSON which will permit users further configuration options:

[
  {
    "Item": "ChebGonaz_SkeletonWand",
    "Amount": 1,
    "Requirements": [
      {
        "Item": "Wood",
        "Amount": 5
      }
    ]
  }
]

Info

Read here for info on how to do it.

Attention

Somehow this needs to be a serverside thing. Client's shouldn't be able to dictate the recipe requirements of items.

Add LIVE Server Sync

Description

When a config is changed during run-time, it should automatically update on the server without requiring a restart to reload the config.

Is the feature related to a problem?

No.

Solutions

Use the Jotunn SynchronizationManager:

https://valheim-modding.github.io/Jotunn/tutorials/config.html#config-synced-event

SynchronizationManager.OnConfigurationSynchronized += (obj, attr) =>
{
    if (attr.InitialSynchronization)
    {
        Jotunn.Logger.LogMessage("Initial Config sync event received");
    }
    else
    {
        Jotunn.Logger.LogMessage("Config sync event received");
    }
};

Refueler Pylon

Description

Refueler Pylon can be loaded with wood and coal. It puts coal in nearby smelters and wood in nearby kilns automatically.

Stop archers from dealing damage to player structures

Description

Stop archers arrows from dealing damage to player structures. It's annoying and sometimes deadly - like when they sink your ship.

Approach

  • A harmony patch on the Projectile class' OnHit function might work.

1.4.0: null object on intercepting minion structure damage

Describe the bug

The patch which is responisble for stopping minions from damaging player structures works but sometimes I get this error:

[Error : Unity Log] NullReferenceException: Object reference not set to an instance of an object
Stack trace:
FriendlySkeletonWand.ArrowImpactPatch.Prefix (HitData& hit, Piece ___m_piece) (at <060dd28ae0a5420bb59e9150b68b2ebd>:0)
(wrapper dynamic-method) WearNTear.DMDWearNTear::RPC_Damage(WearNTear,long,HitData)
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
Rethrow as TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Delegate.DynamicInvokeImpl (System.Object[] args) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.MulticastDelegate.DynamicInvokeImpl (System.Object[] args) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Delegate.DynamicInvoke (System.Object[] args) (at <695d1cc93cca45069c528c15c9fdd749>:0)
RoutedMethod`1[T].Invoke (System.Int64 rpc, ZPackage pkg) (at <35c0f7aa1999477788815a7bf78200d7>:0)
ZNetView.HandleRoutedRPC (ZRoutedRpc+RoutedRPCData rpcData) (at <35c0f7aa1999477788815a7bf78200d7>:0)
ZRoutedRpc.HandleRoutedRPC (ZRoutedRpc+RoutedRPCData data) (at <35c0f7aa1999477788815a7bf78200d7>:0)
ZRoutedRpc.InvokeRoutedRPC (System.Int64 targetPeerID, ZDOID targetZDO, System.String methodName, System.Object[] parameters) (at <35c0f7aa1999477788815a7bf78200d7>:0)
ZNetView.InvokeRPC (System.String method, System.Object[] parameters) (at <35c0f7aa1999477788815a7bf78200d7>:0)
WearNTear.Damage (HitData hit) (at <35c0f7aa1999477788815a7bf78200d7>:0)
Projectile.OnHit (UnityEngine.Collider collider, UnityEngine.Vector3 hitPoint, System.Boolean water) (at <35c0f7aa1999477788815a7bf78200d7>:0)
Projectile.FixedUpdate () (at <35c0f7aa1999477788815a7bf78200d7>:0)

To Reproduce

Let NPCs hit player stuff

Desktop (please complete the following required information):

  • OS: Linux
  • Mod version: 1.4.0
  • Game version:

Disable Minion Aggro to Specific Creatures

Hey great mod so far. I put it off for a bit because I was afraid it would be too op. Finally got it to check out the config and it has a surprising amount of customization. Great mod.

There is a small issue with monsterlabz and definitely not anything on your end or even a bug at all. Just wondering if it's something that could be tweaked, and I will contact that mod author as well. The skeletons really hate butterflies lol. The will aggro to them and ignore everything else including follow commands trying to shoot down a butterfly. I wasn't sure if maybe an aggro block list was possible or something. Again I will contact that dev and see if maybe we can get the butterflies changed to neutral or friendly. Thanks for your time and again really good mod, I regret not trying it for so long.

lichdom

Description

Player can become a lich, at which point a model swap is activated. Aedenthorn already made a playable skeleton mod here, which can be studied.

UPDATE: Phylactery implemented in 4.1.0

Gameplay Aspects

  • Player must create a Phylactery at their base
  • The Phylactery is an expensive item and must be crafted with 10000 gold and loaded with cores
  • If the player loads 1 infernal core or 50 surtling cores into their Phylactery, the next time they take a blow that would kill them, they instead get teleported back to their phylactery and the core(s) is(are) consumed
  • The first time they die with a loaded phylactery, they become a lich after teleporting
  • If the player has no fuel in their phylactery, or no phylactery, then they are killed like normal and if not already a lich no transformation occurs
  • Liches gain standard undead benefits like immunity to poison, weakness to blunt, etc

Dragon Eggs

Use dragon eggs as a fuel for the Phylactery because they are:

  • heavy and a pain in the butt to move around
  • relatively rare
  • Mostly useless

As such, we bring further utility to a useless item and also make the process of fueling the phylactery a non-trivial task.

Spirit pylon causing an error when disabled in config

SpiritPylonAllowed = false

causes this error to appear on game startup

[Error:Jotunn.Entities.CustomPiece] CustomPiece ChebGonaz_SpiritPylon has no PieceTable
[Warning:Jotunn.Logger] [FriendlySkeletonWand] Custom piece ChebGonaz_SpiritPylon is not valid

ignore minion collision on defensive spikes

Description

Skeletons and other minions love to run around impaling themselves on spikes. The spikes end up destroyed long before any enemies come along to impale themselves due to moronic minions.

rebalance of default requirements and quality

Description

From playing the game with my mod extensively, and in light of new fixes like how armor values actually have a real impact now, I think rebalancing of default requirements is needed.

Proposed changes

Item drop

Minions refund half of their materials (except bones?) on death.

Quality: no star

  • Skeletons
    • bone requirement: three 10
    • mage requirement: one 5 surtling cores
    • boar/deer hide requirement: 5
    • bronze requirement: one 5
    • iron requirement: one 5
    • black metal requirement: one 5
    • archer requirement: nothing 25 wood arrows
  • Draugr
    • bone requirement: three 10
    • meat requirement: one 5
    • archer requirement: nothing 25 wood arrows

Quality: 1 star

Same as base requirements, but doubled (except bones) and with following exceptions:

  • higher necromancy level, as it is now
  • archer: 25 bronze arrows

Quality: 2 star (max)

Same as base requirements, but tripled (except bones) and with following exceptions:

  • higher necromancy level, as it is now
  • archer: 25 iron arrows
  • mage: 1 black core

Option to toggle off minion names/hp bars/stars

EnemyHud.txt

Description

When you have a lot of minions, your screen becomes quickly overwhelmed with tons of health bars and minion names and stars. It really breaks some of the immersion. Some people may want to see them so that they know when their minions are going to die or not; however, it would be nice to make this toggleable for those who don't want to see them all.

Is the feature related to a problem?

No.

Solutions

Implement a Harmony UI hud patch for creatures if they are tamed to toggle off their floating names/HP bars etc.

Your Ideal Solution

Make a config value that can toggle this patch on/off and turn it off by default. Ideally, it would be nice to have a hotkey that could toggle it off/on while in game if that's possible.

References

See attached Harmony patch examples that could potentially help.

make it possible to create armored minions with no material requirement

Description

15 January 2023, 2:26PM
Hi,is there a way to spawn armored skeletons with no materials requirement? Because, for example, when I want to spawn a skeleton with black iron armor and in config the requirement is set to 0, it spawns a basic skeleton (with no armor). I rly enjoy your mod <3

15 January 2023, 9:54PM
Thanks, I'm really happy that you're having fun.

Right now you can't because it's hard to differentiate between the intended minion. You see: Shift+B has too many jobs. It can create unarmored, leather, bronze, iron, or black iron. But unless the materials are present in the inventory, it can't know which one you want. Right now by having the material in your inventory, it decides that you want that one.

I'll need to think up some other/better way of doing this to permit what you want. If you have any ideas about that, I'd love to hear them. But right now the lowest you can go is 1 bar. Sorry about that :(

15 January 2023, 10:11PM
Many thanks for fast reply. Maybe you can add adjustable hotkeys for each armored skeleton? So, for example, shift+b for leather armor skeleton, shift+N for bronze armor one and so on, smth like that. Or maybe to create the feature in config where you can disable to spawn each kind of armored skeleton.

17 January 2023, 10:31PM
How about making Shift+B pull up a menu wheel with the choices to click on?

18 January 2023, 12:24AM
The menu + mousewheel seems like the best idea because there are already a lot of keys. I'll give it some thought and hopefully add something to a future version.

add optional timer for minions

Description

Certain users have requested an optional timer on minions.

Is the feature related to a problem?

Yes. They don't like all these undead building up and running amok in the forests and things and some kind of clean up is needed.

Solutions

  • A possible solution is to add an optional timer to these minions so they perish after X minutes
  • Another possible solution is to optionally destroy a player's minions after they disconnect. Downside: a network interrupt would result in destroyed minions
    • Perhaps a timer can be made that will destroy the minions that belong to a player after X minions after being disconnected. The timer gets interrupted if they rejoin

1.4.0: skeleton armor values forgotten after logout/login

Describe the bug
Skeleton armor values are forgotten upon logout/login because the humanoid.m_chestItem etc. becomes null.

Proposed fix

  • VisEquipment remembers the prefab names but not their armor values
  • read prefab names out of VisEquipment on Awake and reapply armor

Desktop (please complete the following required information):

  • OS: all
  • 1.4.0

Add Support for CLLC which adds 6 tiers (0-5 Stars) for high difficulty servers

Description

So the ability already exists to increase the star level per tier (Which is compatible with CLLC). However, I think it would be better to implement a smother power creep from 0-100 necromancy. This would only be enabled if the user toggles on CLLC (Creature Level and Loot Control by SmoothBrain) support. Enabling support would switch from 3 tiers to 6 tiers of power.

This also has the side effect of actually giving you something huge to look forward to at 100 skill. Currently the highest tier unlocks at 70 skill. So, all you gain from 71-100 is more base health.

0-19 = 0 Star
20-39 = 1 Star
40-59 = 2 Star
60-79 = 3 Star
80-99 = 4 Star
100 = 5 Star

It would also be interesting to potentially add support for EpicMMO which gives your character a player level and XP. We could gate skill gains behind player levels and ensure users aren't too overpowered for their level by further restricting XP based on their level. However, this is not the intent of this particular issue although I may look into it to see if it's something that would be relatively easy to implement. I know EpicMMO and CLLC are both incredibly popular mods used by most the community and support for them would be greatly appreciated.

Is the feature related to a problem?

Just helps smooth out the power creep a bit more versus making huge incremental jumps in power in large skill level blocks.

Solutions

Simple. Add a config option to enable CLLC. If it's enabled, add a second method of determining minion quality that is only executed if that option is enabled. This would be disabled by default.

Your Ideal Solution

Kind of went over this in the description.

Setting BoneFragmentsDroppedAmountMin to 0 causes no fragments to drop

Example, the following settings will cause 0 bonefragments to drop when it should drop 0-10:

## The minimum amount of bones dropped by creatures.
# Setting type: Int32
# Default value: 1
BoneFragmentsDroppedAmountMin = 0

## The maximum amount of bones dropped by creautres.
# Setting type: Int32
# Default value: 3
BoneFragmentsDroppedAmountMax = 10

Steps to reproduce the bug. For example:

  1. Set BoneFragmentsDroppedAmountMin to 0
  2. Kill any mobs except skeletons (Skeletons always drop them)
  3. Should get no fragments

Expected behavior
It should drop anywhere from 0 to 10 fragments.

Desktop (please complete the following required information):

  • OS: Windows
  • 1.4.0
  • 0.212.9

necroneck gatherer sequence error

Describe the bug
Sequence error when neck is returning items home

[Error  : Unity Log] InvalidOperationException: Sequence contains more than one matching element
Stack trace:
System.Linq.Enumerable.Single[TSource] (System.Collections.Generic.IEnumerable`1[T] source, System.Func`2[T,TResult] predicate) (at <351e49e2a5bf4fd6beabb458ce2255f3>:0)
FriendlySkeletonWand.Minions.NecroNeckGathererMinion.FindNearestDropOffPoint () (at <5dbec6fcb70e44468390c8631ac9ec03>:0)
FriendlySkeletonWand.Minions.NecroNeckGathererMinion.Update () (at <5dbec6fcb70e44468390c8631ac9ec03>:0)

Propose adding new config entry constructor

This method allows us to more simply create config values using mostly strings and allows for the following paramters:

  • group - how to group the value in the config
  • name - name of the parameter
  • defaultValue - the default value of the parameter
  • description - a short description of what the parameter does
  • acceptableValues - a list of acceptable or possible values you can use
  • serverSync - whether or not this parameter is enforced server side or client side

Note: Instead of breaking the groups into server synced and client synced, this new constructor simply adds either "[Synced with Server]" or "[Not Synced with Server]" to the end of the description.

Willing to take suggestions or make tweaks or include additional tags.

Before:

        public static void CreateConfigs(BaseUnityPlugin plugin)
        {
            allowed = plugin.Config.Bind("SpiritPylon (Server Synced)", "SpiritPylonAllowed",
                true, new ConfigDescription("Whether making a Spirit Pylon is allowed or not.", null,
                new ConfigurationManagerAttributes { IsAdminOnly = true }));

            craftingCost = plugin.Config.Bind("SpiritPylon (Server Synced)", "Spirit Pylon Build Costs",
                DefaultRecipe, new ConfigDescription("Materials needed to build Spirit Pylon. None or Blank will use Default settings.", null,
                new ConfigurationManagerAttributes { IsAdminOnly = true }));

            sightRadius = plugin.Config.Bind("SpiritPylon (Server Synced)", "SpiritPylonSightRadius",
                30f, new ConfigDescription("How far a Spirit Pylon can see enemies.", null,
                new ConfigurationManagerAttributes { IsAdminOnly = true }));

            ghostDuration = plugin.Config.Bind("SpiritPylon (Server Synced)", "SpiritPylonGhostDuration",
                30f, new ConfigDescription("How long a Spirit Pylon's ghost persists.", null,
                new ConfigurationManagerAttributes { IsAdminOnly = true }));

            delayBetweenGhosts = plugin.Config.Bind("SpiritPylon (Server Synced)", "SpiritPylonDelayBetweenGhosts",
                5f, new ConfigDescription("How long a Spirit Pylon must wait before being able to spawn another ghost.", null,
                new ConfigurationManagerAttributes { IsAdminOnly = true }));

            maxGhosts = plugin.Config.Bind("SpiritPylon (Server Synced)", "SpiritPylonMaxGhosts",
                3, new ConfigDescription("The maximum number of ghosts that a Spirit Pylon can spawn.", null,
                new ConfigurationManagerAttributes { IsAdminOnly = true }));
        }
[SpiritPylon (Server Synced)]

## Whether making a Spirit Pylon is allowed or not.
# Setting type: Boolean
# Default value: true
SpiritPylonAllowed = true

## Materials needed to build Spirit Pylon. None or Blank will use Default settings.
# Setting type: String
# Default value: Stone:15,Wood:15,BoneFragments:15,SurtlingCore:1
Spirit Pylon Build Costs = Stone:50,Wood:50,BoneFragments:100,SurtlingCore:5

## How far a Spirit Pylon can see enemies.
# Setting type: Single
# Default value: 30
SpiritPylonSightRadius = 30

## How long a Spirit Pylon's ghost persists.
# Setting type: Single
# Default value: 30
SpiritPylonGhostDuration = 60

## How long a Spirit Pylon must wait before being able to spawn another ghost.
# Setting type: Single
# Default value: 5
SpiritPylonDelayBetweenGhosts = 5

## The maximum number of ghosts that a Spirit Pylon can spawn.
# Setting type: Int32
# Default value: 3
SpiritPylonMaxGhosts = 3

After:

        public static void CreateConfigs(BasePlugin plugin)
        {
            allowed = plugin.ModConfig("SpiritPylon", "SpiritPylonAllowed",
                true, "Whether making a Spirit Pylon is allowed or not.", "true or false", true);

            craftingCost = plugin.ModConfig("SpiritPylon", "Spirit Pylon Build Costs",
                DefaultRecipe, "Materials needed to build Spirit Pylon. None or Blank will use Default settings.",
                "<Prefab1>:<quantity>[[,<PreFab2>:<quantity>], ...]]", true);

            sightRadius = plugin.ModConfig("SpiritPylon", "SpiritPylonSightRadius",
                30f, "How far a Spirit Pylon can see enemies.", "1 to 100", true);

            ghostDuration = plugin.ModConfig("SpiritPylon", "SpiritPylonGhostDuration",
                30f, "How long a Spirit Pylon's ghost persists.", "1 or more seconds", true);

            delayBetweenGhosts = plugin.ModConfig("SpiritPylon", "SpiritPylonDelayBetweenGhosts",
                5f, "How long a Spirit Pylon must wait before being able to spawn another ghost.", 
                "1 or more seconds", true);

            maxGhosts = plugin.ModConfig("SpiritPylon", "SpiritPylonMaxGhosts",
                3, "The maximum number of ghosts that a Spirit Pylon can spawn.", "1 or more", true);
        }
[SpiritPylon]

## Whether making a Spirit Pylon is allowed or not. [Synced with Server]
# Setting type: Boolean
# Default value: true
# Acceptable value range: true or false
SpiritPylonAllowed = true

## Materials needed to build Spirit Pylon. None or Blank will use Default settings. [Synced with Server]
# Setting type: String
# Default value: Stone:15,Wood:15,BoneFragments:15,SurtlingCore:1
# Acceptable value range: <Prefab1>:<quantity>[[,<PreFab2>:<quantity>], ...]]
Spirit Pylon Build Costs = Stone:50,Wood:50,BoneFragments:100,SurtlingCore:5

## How far a Spirit Pylon can see enemies. [Synced with Server]
# Setting type: Single
# Default value: 30
# Acceptable value range: 1 to 100
SpiritPylonSightRadius = 30

## How long a Spirit Pylon's ghost persists. [Synced with Server]
# Setting type: Single
# Default value: 30
# Acceptable value range: 1 or more seconds
SpiritPylonGhostDuration = 60

## How long a Spirit Pylon must wait before being able to spawn another ghost. [Synced with Server]
# Setting type: Single
# Default value: 5
# Acceptable value range: 1 or more seconds
SpiritPylonDelayBetweenGhosts = 5

## The maximum number of ghosts that a Spirit Pylon can spawn. [Synced with Server]
# Setting type: Int32
# Default value: 3
# Acceptable value range: 1 or more
SpiritPylonMaxGhosts = 3

ModConfig Constructor being used in BasePlugin:

        public ConfigEntry<T> ModConfig<T>(string group, string name, T default_value,
            string description = "", string acceptableValues = "",
            bool serverSync = false, params object[] tags)
        {

            // Create extended description with list of valid values and server sync
            ConfigDescription extendedDescription =
                new ConfigDescription(
                    description + (serverSync
                        ? " [Synced with Server]"
                        : " [Not Synced with Server]"),
                    new AcceptableValueList<string>(acceptableValues),
                    new ConfigurationManagerAttributes { IsAdminOnly = serverSync },
                    tags);

            var configEntry = Config.Bind(group, name, default_value, extendedDescription);

            return configEntry;
        }

Fix textures/materials for Draugr and Wraiths

For some reason the Draugr and Wraith textures/materials are not behaving properly. The transparency isn't respected. This results in the ChebGonaz_DraugrWarrior, ChebGonaz_DraugrArcher and ChebGonaz_GuardianWraith having a lack of transparency which creates blocky hair and blocky sleeves.

Furthermore, this issue may be causing reports of crazy freakouts on Radeon cards. But this is just a suspicion. I can't figure out what's wrong with the materials or textures so any help/advice is appreciated on this issue.


Example of blocky hair on draugr:

image

Material setup:

  • image
  • image

Texture setup:

  • image

Allow minions to travel in/out of instanced dungeons and portals

Description

This feature will allow all minions within a configurable range to travel with you through portals and dungeon entrances.

Is the feature related to a problem?

Yes. You have to re-summon all your minions every time you go in and out of dungeons.

Solutions

First off, the unsummon distance must be changed on all minions to a value of 0 so that they won't unsummon when they are too far away from you. Will will have to set this value to something other than 0 when minions are in a "wait" status so that they don't exist forever.

Something like:

.GetComponent<Tameable>().unsummonDistance = 0

Solution is inspired by OdinPlus TeleportEverything mod. So props will go out to both Kpro and Elga from that community.

Here is some psuedo code that's a work in progress:

public static ConfigEntry<float>? TransportVerticalTolerance; //For flying summons

public static void GetCreatures()
{
    var creatures = new List<Character>();
    Character.GetCharactersInRange(Player.m_localPlayer.transform.position,
        SearchRadius.Value, creatures);
    Allies = GetAllies(creatures);
}


public static List<Character> GetAllies(List<Character> creatures)
{
    var chars = new List<Character>();
    foreach (var c in creatures)
    {
        if (IsValidAlly(c))
        {
            chars.Add(c);
        }
    }
    return chars
}

public static bool IsValidAlly(Character c)
{
    if (!c.IsTamed())
    {
        return false;
    }

    // support configurable distance of minions to teleport
    if (HorizontalDistance(c) <= TransportRadius.Value &&
        VerticalDistance(c) <= TransportVerticalTolerance.Value)
    {
        return true;
    }

    return false;
}


 [HarmonyPatch(typeof(Player), nameof(Player.TeleportTo))]
    public class TeleportToPatch
    {
        private static bool Postfix(bool __result, Player __instance, Vector3 pos,
            Quaternion rot, bool distantTeleport)
        {
            if (!EnableMod.Value)
            {
                return __result;
            }

            if (!__instance.IsTeleporting())
            {
                return __result;
            }

            SetIncludeMode();
            GetCreatures();
            TeleportTriggered = true;

            Jotunn.Logger.info(Localization.instance.Localize("$te_transported_allies_message", Allies.Count.ToString(), TransportAllies.ToString()));
            if (Allies.Count > 0 && TransportAllies)
            {
                TeleportCreatures(__instance, Allies);
            }
            return __result;
        }
    }
[HarmonyPatch(typeof(Tameable), nameof(Tameable.RPC_Command))]
    public class TameableRPCCommandPatch
    {
        private static void Postfix(Tameable __instance, ZDOID characterID)
        {
            if (!EnableMod.Value)
            {
                return;
            }

            if (__instance.m_character.GetComponent<ZNetView>() is { } netView)
            {
                TakeOwnership(__instance.m_character, characterID.m_userID);                   
            }
        }
    }```

Add Hotbar to GUI for Mod Related Commands

Description

As the mod continues to grow and more and more minions/features are added the number of keybinds also continues to grow in order to use these new features.

A LOT of Valheim mods have keybinds and a lot of them tend to bind the same keys which often causes a lot of conflicts.

In addition to the keybinds, I feel it would also be nice to have a configurable hotbar with icons related to each wand.

Is the feature related to a problem?

No.

Solutions

So instead of using the keybinds you could just press the icons or at least see what keybinds are bound to the abilities on the currently equipped wand.

This could prevent us from having to use a modifier key to consume resources to make things like armored skeletons, mages, poison skeletons etc. We could have an ability for each one with its own Sprite icon.

Your Ideal Solution

I'm not 100% sure how to implement this yet, but I know that it is possible as I've seen other mods create hotbars with abilities tied to specific weapons such as EpicLoot.

Wands missing from Workbench

Upon updated from 1.0.7 to 1.0.8, the wand(s) are not craftable at a workbench. The following error messages are displayed in the console:

[Info : BepInEx] Loading [FriendlySkeletonWand 1.0.8]
[Info :FriendlySkeletonWand.BasePlugin] FriendlySkeletonWand has landed
[Info :FriendlySkeletonWand.BasePlugin+<>c__DisplayClass12_0] Loading ChebGonaz_DraugrArcher.prefab...
[Warning:FriendlySkeletonWand] Exception caught while adding custom creatures: System.NullReferenceException: Object reference not set to an instance of an object
at FriendlySkeletonWand.BasePlugin+<>c__DisplayClass12_0.b__0 (System.String prefabName) [0x00015] in :0
at System.Collections.Generic.List1[T].ForEach (System.Action1[T] action) [0x00024] in <695d1cc93cca45069c528c15c9fdd749>:0
at FriendlySkeletonWand.BasePlugin.AddCustomCreatures () [0x00053] in :0
[Error : Unity Log] NullReferenceException: Object reference not set to an instance of an object
Stack trace:
FriendlySkeletonWand.BasePlugin.AddCustomCreatures () (at :0)
FriendlySkeletonWand.BasePlugin.Awake () (at :0)
UnityEngine.GameObject:AddComponent(Type)
BepInEx.Bootstrap.Chainloader:Start()
UnityEngine.Application:.cctor()

Currently unable to craft a new wand or spawn in said wand.

new minion: elite draugr

Add the Elite Draugr in as a minion somehow. Maybe it replaces the existing draugr warrior beyond a certain necromancy level, or requires some special consumable to craft. Ideas welcome.

draugr armor

Description

Just like the skeletons, implement armor for draugr.

This is a good beginner issue too (should be mostly copy and paste from the skeletons). If you want it, lemme know.

Approach

  • Compare the SkeletonMinion.cs and DraugrMinion.cs
  • Implement the ScaleEquipment function for Draugr
  • Call the function when instantiating a draugr minion in DraugrWand.cs

idea: upgraded wands benefits

Kind of related to #24 , we need to come up with some reasons to upgrade wands. Possibilities:

  1. more efficient resource consumption?
  2. spawn multiple minions at once?
  3. higher quality minions?

31/03/2023

Confirmed behaviours moving forward regarding this feature:

  • Teleportation
    • Right now, the player can teleport minions as much as they want. This can be abused to yoink minions perpetually away from danger (I do this frequently - it's bad, but I can't help it).
    • Introducing either a durability cost to this action, or a cooldown, will keep minion yoink abuse possible but with a cost.
    • A more upgraded wand should permit a cheaper yoink durability cost.

new minion: undead wyrven

Description

Like the wyrven from the mountains but either skeletal or zombified. For balance reasons, it probably needs to be changed to use a melee attack otherwise most enemies won't be able to fight back against it.

Approach

  • Easiest way might be to take the Deathsquito and do a model & animation swap. This will cause the desired swooping attacks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.