jonathan-robertson / quantum-elevators Goto Github PK
View Code? Open in Web Editor NEW7 Days to Die mod: Add infinite distance, vertical-warp elevator panels.
Home Page: https://discord.gg/hYa2sNHXya
License: MIT License
7 Days to Die mod: Add infinite distance, vertical-warp elevator panels.
Home Page: https://discord.gg/hYa2sNHXya
License: MIT License
Received a report from Oggy#9577
(via Discord) with the following:
So, if you place the Elevator on the 3x3x1 Block ( Point A ) from the Shape menu it will let you travel downwards ( Point B ) , but not upwards onto the elevator placed on the 3x3x1block. ( Error message of No elevator on top floor found).
However, if placing another one above ( Point C ) the 3x3x1block it would let you travel from the very bottom to the very top and then back down onto the 3x3x1 block.So all in all can travel from A to B, but not from B to A.
B to C to A would work again.
Receiving a report that during testing around the time that multiple users were warping, a user who was not attempting to warp (was in a trader) ended up at a different player's warp destination along with that player.
Reported by Grandpa Minion#2643
Thanks to Blight#7410
for reporting this
BuffsWhenWalkedOn
activatesReported by Grandpa Minion#2643
so player a double jumps into a panel with parkour it teleports him up
no pw needed
player A needs parkour skill
than jumps into panel it teleports him up
π₯ Players would be able to intercept horizontal travel by placing a similar panel at the correct x/y or z/y coordinates.
π° Players could raid each others' panels if they aren't locked down. Don't imagine this will be an issue; just lock your panels down lol
π If a player is attempting to raid with a portable panel... it also exposed the raiders to horizontal travel from the defender's end; risky!
Much thanks to Grandpa Minion#2643
for reporting this
To prevent this from being too OP, it could be limited to only work when placed directly on top of an LCB.
Panel | Supports Self | Supports Ally |
---|---|---|
Personal Base Panel | Yes | No |
Ally Base Panel | Yes | Yes |
bJumping
new Dictionary<int(x),Dictionary<int(z),int(y)>
?Don't want to sell them too early π
Allowing terrain decoration setting for elevator pads to be enabled would sometimes position the pads too low to the point the system did not detect if players were standing on them.
Reported by Grandpa Minion#2643
so i logged in to server and the green buffs have stopped working. > Tested on new panels placed same thing. They still seem to be working but buff is not appearing
Does that βwomphβ sound still play when warping, or is that gone as well?
dont hear it quiet
If you enable the player panel with the F3 debug menu, does it show that you have any βquantumβ related buffs attached when not standing on a panel?
It seems the buff isn't getting stuck, so it may be an issue relating to the buff being properly given (or something else is going on).
Have primary action trigger lock/unlock toggle if owner, or password enter attempt if non-owner and a password can be entered (i.e. you don't have permission yet)
If possible, default action could be Activate - same as LCB, except it would perhaps shine a light or column in its own block and directly vertical to make alignment easier.
This might not be avoidable... touching base with Shavick about it to see what he thinks.
Players sometimes stand directly on the warp panel for extended periods of time.
This could be resolved a few different ways...
Integrate with the new Learning By Reading system so this feels like it's part of the game.
Server can add particle effects to blocks, apparently... I wonder if it'll work?
Shavick#8511
for initially reporting thisO C#2804
for suggesting an adjustment that ultimately fixed this issue once the reason for it happening was identifiedvivo#0815
for identifying this only happens on first launchThe bounding box for detecting if entities are within the warp target feels kind of off...
Super weird; I only encountered it once during testing, but our good buddy Shavick noticed it happening for him as well.
This could support an upper panel, for example
Method Block.MultiBlockArray.AddChilds
might be useable for this.
Granting and Managing authorization for complex elevator shafts shouldn't be a burden!
Passwords set on the source panel will act as the key for any destination panels you haven't directly interacted with yet.
A major problem with password protection (and any form of in-game authorization) is that it requires physical access by default.
Let's say you've got a successful base structured around Quantum Elevators. There's no clean way into the base without using them and no clean way out if you don't have permission to use the elevators.
You already have several teammates - all who must use the elevators to navigate.
Today, a new player joined your team. Maybe a friend or family member, but what matters is you trust this person and want to provide access within your base.
how?
Well... the ground floor is easy: you inform this player of your password, the player enters it, and can then stand on the elevator, but.... ah: having permission to the ground floor doesn't grant permission to the upper floors...
graph LR
et[Existing Teammates]
nt[New Teammate]
ex[External Floors]
in[Internal Floors]
et-->|ok|ex
et-->|ok|in
nt-->|ok|ex
nt-->|nope|in
So you temporarily unlock the upper floor so your new buddy can get access to this floor... you then re-lock the elevator and provide him with the password so he can get authorized. Oh, but then all your other teammates have now lost authorization to this floor since unlocking purges the authorized user list.
graph LR
et[Existing Teammates]
nt[New Teammate]
ex[External Floors]
in[Internal Floors]
et-->|ok|ex
et-->|nope|in
nt-->|ok|ex
nt-->|ok|in
So you decide instead to permanently unlock internal floors and only lock the shafts exposed to the outside. This is a cute idea until someone breaks in through a hole in the ceiling and you learn that all internal floors (otherwise protected like an onion) are now exposed. Or maybe they break your LCB, then break the external elevator and replace it with one of their own... This would give the hostile players access to your unlocked elevator structure!
This same problem is present in the old idea of adding firewalls and TLS to your edge routers/firewalls and failing to protect your internal networks... so that's a bad idea.
graph LR
et[Teammates]
ht[Hostiles]
ex[External Floors]
in[Internal Floors]
et-->|ok|ex
et-->|unlocked|in
ht-->|blocked|ex
ht-->|unlocked|in
Bro, what you need is On-Demand Password Chaining!
On source check,
If source password is provided, all destinations with same password are also accessible
lockable.GetPassword()
returns the hash, which can then be compared with others... and automatically entered into them! incredibleILockable
interface for the info on how this might be donegraph TD
no[Non-Owner]
l1[Level 1]
l2[Level 2]
l3[Level 3]
nb[Notify Blocked]
c2{Check Level 2}
c3{Check Level 3}
u2[Unlock Level 2]
u3[Unlock Level 3]
nh[Nothing Happens]
no-->|stands on|l1
l1-->|looks up w/o password|nb
l1-->|looks up w/ password|c2
c2-->|unlocked or has same owner & password|u2-->l2
c2-->|locked and has different/no password|c3
c3-->|locked and has different/no password|nh
c3-->|unlocked or has same owner & password|u3-->l3
Recommended by Grandpa Minion#2643
I have a request for an update to the mod to make it progression need electrician perk to craft it
advanced engineering- electrician perk
QuantumElevators.CoreLogic.CanAccess(PlatformUserIdentifierAbs internalId, TileEntitySign source, TileEntitySign target)
Should we have to account for corrupted/lost tileEntity owners?
Lots and lots of references happening in this section; may have to harden it against possible null references.
An example of a block causing this is found within my server; more info to come.
2023-02-26T09:59:25 130958.724 ERR [QuantumElevators.EntityAlive_updateCurrentBlockPosAndValue_Patches] EntityAlive_updateCurrentBlockPosAndValue_Patches Postfix failed: handle block pos change for {__instance}.
Object reference not set to an instance of an object
at QuantumElevators.CoreLogic.CanAccess (PlatformUserIdentifierAbs internalId, TileEntitySign source, TileEntitySign target) [0x00023] in <799b9b6ce1cf41deaed5f89fc083a42a>:0
at QuantumElevators.CoreLogic.TryGetFloorBelow (PlatformUserIdentifierAbs internalId, Vector3i sourcePos, TileEntitySign source, Vector3i& targetPos) [0x000bc] in <799b9b6ce1cf41deaed5f89fc083a42a>:0
at QuantumElevators.CoreLogic.Warp (QuantumElevators.Direction direction, EntityPlayer player, Vector3i sourceBlockPos, BlockValue sourceBlockValue) [0x00068] in <799b9b6ce1cf41deaed5f89fc083a42a>:0
at QuantumElevators.EntityAlive_updateCurrentBlockPosAndValue_Patches.Postfix (EntityAlive __instance, Vector3i ___blockPosStandingOn, BlockValue ___blockValueStandingOn, System.Boolean ___bCrouching, System.Boolean ___bJumping) [0x00091] in <799b9b6ce1cf41deaed5f89fc083a42a>:0
2023-02-26T09:59:25 130958.732 EXC Object reference not set to an instance of an object
at QuantumElevators.CoreLogic.CanAccess (PlatformUserIdentifierAbs internalId, TileEntitySign source, TileEntitySign target) [0x00023] in <799b9b6ce1cf41deaed5f89fc083a42a>:0
at QuantumElevators.CoreLogic.TryGetFloorBelow (PlatformUserIdentifierAbs internalId, Vector3i sourcePos, TileEntitySign source, Vector3i& targetPos) [0x000bc] in <799b9b6ce1cf41deaed5f89fc083a42a>:0
at QuantumElevators.CoreLogic.Warp (QuantumElevators.Direction direction, EntityPlayer player, Vector3i sourceBlockPos, BlockValue sourceBlockValue) [0x00068] in <799b9b6ce1cf41deaed5f89fc083a42a>:0
at QuantumElevators.EntityAlive_updateCurrentBlockPosAndValue_Patches.Postfix (EntityAlive __instance, Vector3i ___blockPosStandingOn, BlockValue ___blockValueStandingOn, System.Boolean ___bCrouching, System.Boolean ___bJumping) [0x00091] in <799b9b6ce1cf41deaed5f89fc083a42a>:0
UnityEngine.StackTraceUtility:ExtractStringFromException(Object)
Log:Exception(Exception)
QuantumElevators.ModLog`1:Error(String, Exception)
QuantumElevators.EntityAlive_updateCurrentBlockPosAndValue_Patches:Postfix(EntityAlive, Vector3i, BlockValue, Boolean, Boolean)
EntityAlive:DMD<EntityAlive::updateCurrentBlockPosAndValue>(EntityAlive)
EntityAlive:OnUpdateLive()
EntityPlayer:OnUpdateLive()
EntityAlive:OnUpdateEntity()
EntityPlayer:OnUpdateEntity()
World:TickEntity(Entity, Single)
World:TickEntitiesSlice(Int32)
World:TickEntitiesFlush()
GameManager:UpdateTick()
GameManager:gmUpdate()
GameManager:Update()
It could be funny for zombies to be falling from the sky, but players will likely become frustrated by accidentally being bumped to their deaths by a friendly player. π
This should receive floating point coordinates and convert them in the appropriate block coordinates for us.
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.