• DarkRP - Skyrim-esque lockpicking
    10 replies, posted
Basically I got Skyrim from Tomelyr and got inspired to make this. It works pretty much exactly like the lockpick from skyrim [t]http://images.akamai.steamusercontent.com/ugc/35244412474863848/16ED44C28E860841DF4D4DE0E0B3BBA2013C45AC/[/t] [url]http://steamcommunity.com/sharedfiles/filedetails/?id=433932042[/url]
[QUOTE=Exho;47621092]Kinda in a hurry, I'll write something meaningful here later [t]http://images.akamai.steamusercontent.com/ugc/35244412474863848/16ED44C28E860841DF4D4DE0E0B3BBA2013C45AC/[/t] [url]http://steamcommunity.com/sharedfiles/filedetails/?id=433932042[/url][/QUOTE] Heh I mentioned that skyrim/fallout esque lockpicking would help in darkrp in one of the general discussion threads about a week ago and whadda ya know, you just happened to have been making one.
This is really cool ! A lockpick that require skill rather than time is so much better.
Been looking for something like this for a while now, so for starters, thank you for creating this. Second thing is, it's free.. Hallelujah! I'll be using this on my server and will happily give you credit for the addon.
Put it on the Coderhire cloning thread. I'm aware that something like this is being sold on SF.
Did you fix relying on the client so much? I'd love to use it if you have.
[QUOTE=mib999;47646216]Did you fix relying on the client so much? I'd love to use it if you have.[/QUOTE] Yeah at the slight expense of responsiveness for getting the correct angle. When you move your lockpick it periodically sends the angle to the server for verification that you are within 10 degrees of the unlocking angle and then it tells the client to do hint-y stuff.
[lua]-- Click once on door = generate number -- Closes panel automatically -- Tries to force the angle -- Send unlock to the server, opens the door local msgcol = Color(51, 153, 102) local function message(msg) chat.AddText(msgcol, "[Pick] ", tostring(msg)) end if weapons.Get("lockpick").Author ~= "Exho" then message("Not using Exho's lockpick.") return end local function forceang(pick, num, callback) message("Trying "..num) net.Start("lockpick_check") net.WriteInt(num, 8) net.SendToServer() -- angle can be between 15 and 165 and accepts intervals of 20 timer.Simple(0.2, function() -- could fail depending on connection if not pick:GetNWBool("lockpick_canTurn") then if num > 165 then message("Picking failed. (Exceeded maximum angle; Zerf is bad.)") net.Start("lockpick_end") net.SendToServer() return end forceang(pick, num + 20, callback) else callback(num) end end) end local pick = LocalPlayer():GetWeapon("lockpick") if not IsValid(pick) then message("Get a lockpick, skrublord.") return end if pick.OldPrimaryAttack then pick.PrimaryAttack = pick.OldPrimaryAttack end pick.OldPrimaryAttack = pick.PrimaryAttack function pick:PrimaryAttack() self:OldPrimaryAttack() if IsValid(self.frame) then -- Don't want no panel self.frame:Remove() self.frame = nil end if not IsFirstTimePredicted() then return end forceang(pick, 5, function(num) message("Forced angle! (It was around "..num..")") net.Start("lockpick_unlock") net.SendToServer() end) end [/lua] not good enough [editline]2nd May 2015[/editline] the script forceably unlocks any door in a maximum of 1.6 seconds
[QUOTE=zerf;47648483][lua]-- Click once on door = generate number -- Closes panel automatically -- Tries to force the angle -- Send unlock to the server, opens the door local msgcol = Color(51, 153, 102) local function message(msg) chat.AddText(msgcol, "[Pick] ", tostring(msg)) end if weapons.Get("lockpick").Author ~= "Exho" then message("Not using Exho's lockpick.") return end local function forceang(pick, num, callback) message("Trying "..num) net.Start("lockpick_check") net.WriteInt(num, 8) net.SendToServer() -- angle can be between 15 and 165 and accepts intervals of 20 timer.Simple(0.2, function() -- could fail depending on connection if not pick:GetNWBool("lockpick_canTurn") then if num > 165 then message("Picking failed. (Exceeded maximum angle; Zerf is bad.)") net.Start("lockpick_end") net.SendToServer() return end forceang(pick, num + 20, callback) else callback(num) end end) end local pick = LocalPlayer():GetWeapon("lockpick") if not IsValid(pick) then message("Get a lockpick, skrublord.") return end if pick.OldPrimaryAttack then pick.PrimaryAttack = pick.OldPrimaryAttack end pick.OldPrimaryAttack = pick.PrimaryAttack function pick:PrimaryAttack() self:OldPrimaryAttack() if IsValid(self.frame) then -- Don't want no panel self.frame:Remove() self.frame = nil end if not IsFirstTimePredicted() then return end forceang(pick, 5, function(num) message("Forced angle! (It was around "..num..")") net.Start("lockpick_unlock") net.SendToServer() end) end [/lua] not good enough [editline]2nd May 2015[/editline] the script forceably unlocks any door in a maximum of 1.6 seconds[/QUOTE] Not to say that there's no problem with that, but don't servers generally restrict clientside lua scripts anyway? I haven't played Gmod in a while though so Im probably missing some important detail here
[QUOTE=t h e;47649415]Not to say that there's no problem with that, but don't servers generally restrict clientside lua scripts anyway? I haven't played Gmod in a while though so Im probably missing some important detail here[/QUOTE] In DarkRP sv_allowcslua is 1 by default. Besides, I can run my own code without sv_allowcslua and without any DLLs. Never trust the client.
[QUOTE=zerf;47648483][lua]-- Click once on door = generate number -- Closes panel automatically -- Tries to force the angle -- Send unlock to the server, opens the door local msgcol = Color(51, 153, 102) local function message(msg) chat.AddText(msgcol, "[Pick] ", tostring(msg)) end if weapons.Get("lockpick").Author ~= "Exho" then message("Not using Exho's lockpick.") return end local function forceang(pick, num, callback) message("Trying "..num) net.Start("lockpick_check") net.WriteInt(num, 8) net.SendToServer() -- angle can be between 15 and 165 and accepts intervals of 20 timer.Simple(0.2, function() -- could fail depending on connection if not pick:GetNWBool("lockpick_canTurn") then if num > 165 then message("Picking failed. (Exceeded maximum angle; Zerf is bad.)") net.Start("lockpick_end") net.SendToServer() return end forceang(pick, num + 20, callback) else callback(num) end end) end local pick = LocalPlayer():GetWeapon("lockpick") if not IsValid(pick) then message("Get a lockpick, skrublord.") return end if pick.OldPrimaryAttack then pick.PrimaryAttack = pick.OldPrimaryAttack end pick.OldPrimaryAttack = pick.PrimaryAttack function pick:PrimaryAttack() self:OldPrimaryAttack() if IsValid(self.frame) then -- Don't want no panel self.frame:Remove() self.frame = nil end if not IsFirstTimePredicted() then return end forceang(pick, 5, function(num) message("Forced angle! (It was around "..num..")") net.Start("lockpick_unlock") net.SendToServer() end) end [/lua] not good enough [editline]2nd May 2015[/editline] the script forceably unlocks any door in a maximum of 1.6 seconds[/QUOTE] Yeah I know thats still possible... Do you happen to have any better ideas? This addon, by nature, requires a lot of client input and trust which has left me in a bad place security wise.
Sorry, you need to Log In to post a reply to this thread.