jonathan-robertson / amnesia Goto Github PK
View Code? Open in Web Editor NEW7 Days to Die mod: Reset player progress after dying under a configurable set of circumstances
Home Page: https://discord.gg/hYa2sNHXya
License: MIT License
7 Days to Die mod: Reset player progress after dying under a configurable set of circumstances
Home Page: https://discord.gg/hYa2sNHXya
License: MIT License
Icons aren't informative enough at a glance and players have been reporting confusion around what they mean
As a blanket rule, I could prevent memory impact whenever the player is killed by any mine or turret.
On some servers, players might not all want to participate in Amnesia's features. For those situations, Opt-In mode provides players interested in engaging with this feature certain benefits at the cost of having a limited number of lives before being reset.
Upon reset, players will return to level 1 and whatever other options set by the admin, but will be removed from the limited lives mechanic.
The XP multiplier while enrolled in Opt-In mode can be set by the admin.
Can't have our fresh boy running around with Tier 5 Quests
Instead of resetting and freeing up skill points (free forgetting elixir effect), record the 49th skill point set (or record at player level 50?) and apply that config upon reset.
7DTD A21 Experimental hasn't been released yet, but I plan to have support for A21 ready in time for the general release of the game.
๐ฌ Instead, what if the player who reaches 300 automatically resets to something like level 50 and this is his new minimum level forevermore?
๐ each time the player reaches 300, an extra x levels are added to his minimum count. That would extend the game to last far longer even for driven players.
๐๏ธ This could perhaps be represented as some kind of Prestige value somewhere for other players to see.
๐ This way, players "always" have something to work toward
Might include this as an option, but discouraging PVP is usually a horrible idea.
Drop style would be based on server's rules. So if the server is set to drop the backpack, that's all that would drop on death.
Being able to enable debug logging should be helpful into the future.
Lots of zombies are typically left over after BloodMoon, which can be risky
Hours later you awake in a familiar place. Groggy and sore from you recent adventure, you wonder how you ever managed to make it back alive.
This server provides a set number of lives before total character deletion and this requires you to evaluate every risky situation more realistically. You have x/y Remaining Lives and are about to use one to return from the brink of death. You can Recover Lives by visiting Trader Jen and paying for her experimental rejuvenation treatments.
Darkness closes in around you as everything - even your own body - begins to feel more and more distant. You know you won't be coming back.. not this time.
IMPORTANT: If you were just killed due to game glitches, or suspect another player of defeating you with hacking or exploits, DO NOT RESPAWN. Instead, reach out to an admin. After investigating your admin may decide it's appropriate to provide you with another life to prevent your character from resetting.
Hopefully this will help to encourage players to keep going after wipe.
๐ Thanks to Waymaran#4137
(Discord) for this idea!
... could you put another option that subtracts 10 lvl when you die? In other words, you can configure so many lvl that you lose when you die. Eg I would configure that 10 lvl is lost when dying successively unless you use the booster pill. Thanks, I'm just asking.
Add ranking visuals as a prefix for player and zombie kill counts (for recognition/reputation).
Also determine titles to accompany player names in chat.
[Red]A[Green]S Battleborne the Zombie Slayer: ""
When a player dies, this buff can show for some period of time.
It will provide guidance to seek out Trader Jen to receive intense treatment to restore lives (for money, a level, and the loss of a random assigned skill point or loose skill point - a feature to be added later).
For example...
Lives Remaining | Drop On Defeat |
---|---|
2/2 | Drop Nothing |
1/2 | Drop Backpack Only |
0/2 | Drop Everything |
๐ญ Might have to actually simulate bag drop and inventory manipulation since trying to feed spoofed GameStat changes are tough to do on time (tricks player into thinking server configs are different from what they actually are).
2022-09-26T23:22:00 1189.580 EXC Object reference not set to an instance of an object
at Amnesia.Handlers.EntityKilled.Handle (Entity killedEntity, Entity killerEntity) [0x00000] in <77e44bbccb234bb7ac057ede33f51237>:0
UnityEngine.StackTraceUtility:ExtractStringFromException(Object)
Log:Exception(Exception)
Amnesia.Utilities.ModLog:Error(String, Exception)
Amnesia.Handlers.EntityKilled:Handle(Entity, Entity)
ModEvent`2:Invoke(Entity, Entity)
EntityAlive:DMD<EntityAlive::OnEntityDeath>(EntityAlive)
EntityAnimal:OnEntityDeath()
EntityAlive:DMD<EntityAlive::ClientKill>(EntityAlive, DamageResponse)
EntityAlive:Kill(DamageResponse)
EntityAlive:ProcessDamageResponseLocal(DamageResponse)
EntityAlive:damageEntityLocal(DamageSource, Int32, Boolean, Single)
EntityAlive:DamageEntity(DamageSource, Int32, Boolean, Single)
EntityAnimal:DamageEntity(DamageSource, Int32, Boolean, Single)
BlockDamage:OnEntityCollidedWithBlock(WorldBase, Int32, Vector3i, BlockValue, Entity)
ChunkCluster:CheckCollisionWithBlocks(Entity)
World:CheckEntityCollisionWithBlocks(Entity)
Entity:ccEntityCollisionResults()
Entity:ccEntityCollision(Vector3)
Entity:entityCollision(Vector3)
EntityAlive:DefaultMoveEntity(Vector3, Boolean)
EntityAlive:MoveEntityHeaded(Vector3, Boolean)
EntityAlive:OnUpdateLive()
EntityAnimal:OnUpdateLive()
EntityAlive:OnUpdateEntity()
World:TickEntity(Entity, Single)
World:TickEntitiesSlice(Int32)
World:TickEntitiesFlush()
World:TickEntities(Single)
GameManager:UpdateTick()
GameManager:gmUpdate()
GameManager:Update()
Attempting to interact with the map/game directory before it's created for brand new maps
A21 is getting rid of the Secret Stash
flowchart LR
natural[[Natural]]-->incap[[Incapacitated]]
natural-->|use memory booster|hard[[Hardened Memory]]
hard-->incap-->|hardened|natural
incap-->|not hardened|amnesia[Lose Memory, Reset to Level 50]
amnesia-->natural
flowchart LR
natural[[Natural]]-->incap[[Incapacitated]]
incap-->|not fragile|fragile[[Fragile Memory]]
incap-->|fragile|amnesia[Lose Memory, Reset to Level 50]
amnesia-->fragile
fragile-->incap
fragile-->|use memory booster|natural
The current flow is confusing players and there isn't a natural way to warn players when Amnesia activates. This adjustment will serve both purposes: giving players a warning, and also fitting within the existing "injury/ailment needs a cure" workflow that players are already used to.
dialogs.xml
<config>
<!-- <append xpath="/dialogs">
<response id="recovery" text="dialog_trader_response_recover" nextstatementid="admin">
<requirement type="Admin" requirementtype="Hide" />
</response>
</append> -->
<insertBefore xpath="/dialogs/dialog[@id='trader' or @id='traderTest']/statement[@id='start']/response_entry[@id='admin']">
<response_entry id="background" />
<!-- <response_entry id="recover" /> -->
</insertBefore>
</config>
buffs.xml
<buff name="buffAmnesiaRecoverLife" hidden="true" remove_on_death="false">
<duration value="0" />
<effect_group>
<passive_effect name="RunSpeed" operation="perc_set" value="0" />
<passive_effect name="WalkSpeed" operation="perc_set" value="0" />
<passive_effect name="CrouchSpeed" operation="perc_set" value="0" />
<passive_effect name="JumpStrength" operation="perc_set" value="0" />
<triggered_effect trigger="onSelfBuffStart" action="ModifyScreenEffect" intensity="1" fade="1" effect_name="infection" />
<triggered_effect trigger="onSelfBuffRemove" action="ModifyScreenEffect" intensity="0" fade="1" effect_name="infection" />
<triggered_effect trigger="onSelfBuffStart" action="ShowToolbeltMessage" message_key="buffAmnesiaRecoverLifeTooltip" />
</effect_group>
</buff>
<buff name="buffAmnesiaRecoverLifeMaxed" hidden="true" remove_on_death="false">
<duration value="2" />
<effect_group>
<triggered_effect trigger="onSelfBuffStart" action="RemoveBuff" buff="buffAmnesiaRecoverLife" />
<triggered_effect trigger="onSelfBuffStart" action="ShowToolbeltMessage" message_key="buffAmnesiaRecoverLifeMaxedTooltip" />
</effect_group>
</buff>
<buff name="buffAmnesiaRecoverLifeMissingPoint" hidden="true" remove_on_death="false">
<duration value="2" />
<effect_group>
<triggered_effect trigger="onSelfBuffStart" action="RemoveBuff" buff="buffAmnesiaRecoverLife" />
<triggered_effect trigger="onSelfBuffStart" action="ShowToolbeltMessage" message_key="buffAmnesiaRecoverLifeMissingPointTooltip" />
</effect_group>
</buff>
<buff name="buffAmnesiaRecoverLifeSuccess" hidden="true" remove_on_death="false">
<duration value="2" />
<effect_group>
<triggered_effect trigger="onSelfBuffStart" action="RemoveBuff" buff="buffAmnesiaRecoverLife" />
<triggered_effect trigger="onSelfBuffStart" action="ShowToolbeltMessage" message_key="buffAmnesiaRecoverLifeSuccessTooltip" sound="spawnInStinger" />
</effect_group>
</buff>
ExpDeficitPerDeathPercentage
ExpDeficitMaxPercentage
Using Harmony here would be far superior to OnUpdate checks!
I died when in post-bm grace period and lost a life
In the final stage (living your final life), this buff will show all the time and possibly flash.
This final stage will provide certain benefits (which can be disabled/enabled by admin) possibly coming from within this list:
Found out a very likely approach to removing quests!
Server will be reading player data already on death.
Instead of having to disconnect player so player can come back with manipulated player data file... the server can send the player a console command to have the player's client issue the command instead (which is supported).
ConnectionManager.Instance.Clients.ForEntityId(player.entityId)
?.SendPackage(NetPackageManager.GetPackage<NetPackageConsoleCmdClient>().Setup($"removequest {questId}", true));
In support of the new Learn by Looting System
One admin may want to support erasure of skill and levels, but not of books
Level (Default: Reset to 1)
XP to Next Level (Default: Reset to 0)
XP Deficit (Default: Reset to 0)
Unspent Skill Points (Default: Reset to 0)
Learned Skills (Default: Unlearn All)
Crafting Recipes (Default: Unlearn All)
Book Collection (Default: Forget All)
Current Quests (Default: Remove All)
Trader Progress (Default: Reset)
Map Explored (Default: ?)
Map Waypoints (Default: ?)
Sleeping Bag Position (Default: Retain)
LCB Ownership (Default: Retain)
Current Party (Default: Remain)
Allies/Friends (Default: Keep)
Probably doesn't matter though. Cheaters can spawn in any items they want via creative menu and can just give themselves max levels in a few seconds.
amn help
currently lists info around the deprecated hardened memory buff
New "character", new relationships to build
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.