Version 1.2.0 - TEST / RELEASE CANDIDATE
SP_PartyResearch changes Undead Legacy shared research into PARTY-ONLY cooperation.
Each player keeps their own permanent personal research. While players are in the same normal 7 Days to Die party, each player temporarily receives the shareable knowledge provided by the other current party members.
When the player leaves/changes party, only borrowed access is removed. Personal progression remains intact.
This mod does NOT replace or patch UndeadLegacy.dll.
The recommended/default mode is now:
BorrowedResearchMode="UnlocksOnly"
In this mode SP_PartyResearch shares the secondary unlock CVars required by the research, but DOES NOT force the Undead Legacy research-node CVar itself to "known".
Why?
Older/global-style implementations can make UL think the player already owns a node, which can make it impossible to research/pay for that node permanently while it is being borrowed.
UnlocksOnly is designed so:
Player A owns Advanced Engineering. Player B borrows its benefits through the party. Player B can still research Advanced Engineering normally in Undead Legacy. UL charges the normal research cost. SP detects the legitimate research-node acquisition. Advanced Engineering becomes PERSONAL for Player B. It remains after leaving the party.
There is also:
BorrowedResearchMode="FullKnown"
This loans the research-node CVar too, closer to the old behaviour. It is NOT the recommended mode if you want players to be able to convert borrowed research into personal research naturally.
Before SP changes an unlock CVar it saves the exact previous value.
Example:
before party: CVar = 0 borrowed: CVar = 1 leave party: CVar = 0
If the original value was something else, that exact value is restored.
SP also avoids stomping another mod's positive CVar changes. If a borrowed CVar was changed externally to a different positive value while the loan was active, SP clears its own bookkeeping without forcing the old value back over the external change.
By default:
- New research completed by a party member -> other online party members are notified.
- Several researches in one sync window -> grouped into one message.
- Join party -> summary of how much temporary research was received.
- Leave party -> summary of how much temporary research was removed and how much personal research was preserved.
- Offline party member -> notification can be queued and delivered later.
Notifications use the normal 7DTD private/whisper message system, keeping the main mod server-side only.
Default sender:
SP Research
7DTD parties are runtime/online objects. To support useful offline notifications, SP_PartyResearch stores RECENT party relationships in the save:
SP_PartyResearch_PartyMemory.tsv
Default memory window:
24 hours
This memory is ONLY used to decide who may receive a pending offline notification. It does not create a persistent clan/guild and it does not make research permanently shared.
A pending notification is delivered only when:
- The player is online again.
- The ORIGINAL research provider is currently back in the same party.
- The research is currently borrowed for the recipient.
- The recipient has not already learned it personally.
Pending notifications are saved in:
SP_PartyResearch_PendingNotifications.tsv
Default expiration:
14 days
The mod now includes Config.xml.
Important defaults:
SyncIntervalSeconds="2" Debug="false" Language="pt-PT" BorrowedResearchMode="UnlocksOnly"
Notifications Enabled="true" OnResearch="true" OnJoin="true" OnLeave="true" Offline="true"
PendingMaxAgeDays="14" RememberPartyHours="24"
Default:
Everything is shareable except research explicitly listed under Block.
Example:
Alternative:
Only research listed under Allow is shared.
Use the INTERNAL Undead Legacy research name, not necessarily the translated display name.
Command aliases:
sppr partyr
Examples:
sppr status Bruno sppr party Bruno sppr research Bruno sppr queue Bruno sppr audit sppr config sppr resync sppr reload
Admin fallback:
sppr promote Bruno internalResearchName
WARNING: "promote" directly marks research as personal and DOES NOT charge the Undead Legacy research cost. It is an admin recovery/debug tool, not the normal player workflow.
The normal Borrowed -> Personal workflow should happen by researching the node through Undead Legacy while using UnlocksOnly mode.
IMPORTANT: BACK UP THE SAVE FIRST.
Do NOT run the original/global Shared Research addon at the same time.
Folder structure:
<7DTD root>\Mods
UndeadLegacy
SP_PartyResearch\
For an update from 1.0.1 / 1.1.0:
-
Stop the server.
-
Back up the world/save and player data.
-
Replace the old SP_PartyResearch folder with this 1.2.0 folder.
-
Keep/edit Config.xml as desired.
-
Run BUILD.bat.
-
Confirm SP_PartyResearch.dll is created.
-
Start the server.
-
Check the log for:
[SP_PartyResearch] Loaded v1.2.0 [SP_PartyResearch] Research cache built
BUILD.bat / Build.ps1 compiles against the exact Assembly-CSharp.dll installed on the server/game machine.
That is safer for this test/release candidate than shipping a binary compiled against a guessed 7DTD build.
This Soul Project release package also includes a precompiled DLL validated against the currently installed Soul Project Undead Legacy server. Rebuilding after a game or Undead Legacy update is still recommended.
Build.ps1 now compiles every .cs file in this folder, including the admin command.
1.2.0 includes migration logic for the old SP borrowed markers.
Old versions could set the actual research-node CVar to 1 while borrowed. On first 1.2.0 sync, nodes explicitly marked as borrowed and not marked personal are cleaned so the recommended UnlocksOnly model can take over.
IMPORTANT EDGE CASE: If a player legitimately paid for/researched a node while an old version still marked that exact node as borrowed, old bookkeeping may not contain enough information to prove that acquisition afterwards. This is why a SAVE BACKUP before updating is strongly recommended.
The public 1.0.1 -> 1.2.0 update should be tested on a copy of the live save first.
Use cheap/easy research nodes first.
TEST 0 - BUILD Run BUILD.bat. Expected: SP_PartyResearch.dll created with BUILD OK.
Server console: sppr config sppr audit
TEST 1 - NO PARTY A and B are not in a party. A researches X normally. Wait ~2 seconds. Expected: A owns X. B receives nothing.
TEST 2 - PARTY BORROW Put A and B in a party. Expected: Join summary is shown. B gets the benefits/unlocks supplied by A.
Check: sppr status A sppr status B sppr research B
TEST 3 - BORROWED -> PERSONAL (MOST IMPORTANT TEST) A owns research Y. B does NOT own Y. A and B are in the same party. Confirm B receives Y's borrowed benefits.
While STILL in the party, B opens Undead Legacy research and researches/pays for Y normally.
Expected: UL allows B to research Y. Normal UL cost is charged. Within ~2 seconds SP marks Y PERSONAL for B.
Check: sppr research B
Then B leaves the party.
Expected: Y REMAINS available to B because it is now personal.
If UL refuses to let B research Y while the borrowed benefits are active, STOP and report exactly what the UL research UI shows. That tells us whether UL also infers ownership from a secondary unlock CVar and needs a more specific integration hook.
TEST 4 - LEAVE / SAFE RESTORE B has some borrowed research and some personal research. B leaves the party. Expected: Borrowed access is removed. Personal access remains. Leave summary reports both counts.
TEST 5 - PARTY HOPPING B joins Party A and borrows X. B leaves. B joins Party C. Expected: X does not become permanently personal just from party hopping.
TEST 6 - LIVE NOTIFICATION A + B in party. A researches Z. Expected: B receives one SP Research notification after the sync. A does not receive a redundant notification about their own research.
TEST 7 - OFFLINE NOTIFICATION A + B are seen together in a party. B disconnects. A researches Z2 within RememberPartyHours. Expected: pending TSV is updated.
B returns but is not yet with A. Expected: no false notification.
B reforms party with A. Expected: Z2 becomes borrowed. offline notification is delivered.
TEST 8 - OFFLINE ACROSS SERVER RESTART A + B are seen together. B disconnects. Restart server. A returns and researches Z3 within the recent-party memory window. B later returns and reforms party with A. Expected: pending/recent party memory can still result in a validated notification.
TEST 9 - BLOCK FILTER Add a real research internal name to Config.xml Block. Run: sppr reload
Expected: that research is not borrowed from other party members. personal owners keep it normally.
TEST 10 - EXACT CVar RESTORE / MODPACK SAFETY Debug=true can help inspect logs. Verify borrowed unlocks disappear on leave but pre-existing unlocks do not. If another mod also changes the same CVar, verify SP does not overwrite a different positive external value when the party loan ends.
TEST 11 - ADMIN TOOLS sppr status sppr party sppr research sppr queue sppr audit sppr config sppr resync sppr reload
The MAIN SP_PartyResearch mod remains server-side only.
A custom graphical client UI is intentionally NOT bundled into the server-side core, because doing so would change the install requirement for players. The current notification path is native 7DTD whisper/private messaging and requires no client addon.
If a graphical popup addon is released later, it should be a separate optional client package so servers can keep SP_PartyResearch itself server-side only.
ModInfo.xml Config.xml SP_PartyResearch.cs SP_PartyResearch_Command.cs SP_PartyResearch.dll SP_PartyResearch.pdb Build.ps1 BUILD.bat README.txt CHANGELOG.txt RELEASE_NOTES_1.2.0.txt