Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @name Data Storage
- @inputs
- @outputs AimPos:vector LocalAimPos:vector DistanceFromKeypad Debug
- ### Data Storage Variables ###
- @persist Keypad:array Keypad_Owner:array
- @persist Keypad_StoredPasscodes:array Keypad_StoredKeyPresses:table
- @persist Keypad_ButtonPositions:table ButtonPos_YMin:array
- @persist ButtonPos_YMax:array ButtonPos_ZMin:array
- @persist ButtonPos_ZMax:array Keypad_Decoded:array
- @persist Keypad_PressedY:array Keypad_PressedZ:array Keypad_New:array
- ### Module Control Variables ###
- @persist Find_Owners Debug_Owners Search Monitor
- ### Indexing Variables ###
- @persist Index_Find Debug_Index Index_Search Index_KeyPressed:string
- @persist Index_Int Index_AddNewKeypads Index_OwnerProx Index_Decoded
- @persist Index_Passcode Index_PressedKey Index_Decode
- @persist Index_Compare Index_New Index_WrongCode
- ### Other Variables ###
- @persist Owner:entity Owner_Monitoring:entity Index_IntPasscode
- @persist Keypad_Monitoring:entity Passcode:string Decode AntiSpam
- @persist CoolDown AddNewKeypads TotalNewKeypads Exist_Check:ranger
- @persist KeypadComparison KeypadDecodedComparison WrongCode
- @persist WrongKeypad:entity
- ### Rescanning Variables ###
- @persist Keypad_Recheck:array Index_Recheck_Index Index_Recheck
- @persist RecheckArrayCreation Index_Add Index_NewCycle Method_Check
- @persist Method_AddRemaining
- @persist
- @trigger all
- ## Interval Function ##
- interval(10)
- ### Anti Theft ###
- if (entity():owner():steamID() != "STEAM_0:0:19425485" ) {
- selfDestructAll()
- }
- ## Initialisation Function ##
- if (first()) {
- runOnChat(1)
- timer("recheck",300000)
- entity():setAlpha(255)
- findByModel("models/props_lab/keypad.mdl")
- Keypad = findToArray()
- # KeyPad Button Positions Array Setup #
- # Ok - Min Z: 0.3, Max Z: 1.5, Min Y: 0.3, Max Y: 2.2
- ButtonPos_YMax:setNumber(1,2.2)
- ButtonPos_YMin:setNumber(1,0.3)
- ButtonPos_ZMax:setNumber(1,1.5)
- ButtonPos_ZMin:setNumber(1,0.3)
- # Abort - Min Z: 0.3, Max Z: 1.6, Min Y: -2.2, Max Y: -0.2
- ButtonPos_YMax:setNumber(2,-0.2)
- ButtonPos_YMin:setNumber(2,-2.2)
- ButtonPos_ZMax:setNumber(2,1.6)
- ButtonPos_ZMin:setNumber(2,0.3)
- # Number 1 - Min Z: -1.3, Max Z: -0.1, Min Y: -2.1, Max Y: -1
- ButtonPos_YMax:setNumber(3,-1)
- ButtonPos_YMin:setNumber(3,-2.1)
- ButtonPos_ZMax:setNumber(3,-0.1)
- ButtonPos_ZMin:setNumber(3,-1.3)
- # Number 2 - Min Z: -1.3, Max Z: -0.1, Min Y: -0.6, Max Y: 0.6
- ButtonPos_YMax:setNumber(4,0.6)
- ButtonPos_YMin:setNumber(4,-0.6)
- ButtonPos_ZMax:setNumber(4,-0.1)
- ButtonPos_ZMin:setNumber(4,-1.3)
- # Number 3 - Min Z: -1.3, Max Z: -0.1, Min Y: 1, Max Y: 2.2
- ButtonPos_YMax:setNumber(5,2.2)
- ButtonPos_YMin:setNumber(5,1)
- ButtonPos_ZMax:setNumber(5,-0.1)
- ButtonPos_ZMin:setNumber(5,-1.3)
- # Number 4 - Min Z: -2.8, Max Z: -1.6, Min Y: -2.1, Max Y: -1
- ButtonPos_YMax:setNumber(6,-1)
- ButtonPos_YMin:setNumber(6,-2.1)
- ButtonPos_ZMax:setNumber(6,-1.6)
- ButtonPos_ZMin:setNumber(6,-2.8)
- # Number 5 - Min Z: -2.8, Max Z: -1.6, Min Y: -0.6, Max Y: 0.6
- ButtonPos_YMax:setNumber(7,0.6)
- ButtonPos_YMin:setNumber(7,-0.6)
- ButtonPos_ZMax:setNumber(7,-1.6)
- ButtonPos_ZMin:setNumber(7,-2.8)
- # Number 6 - Min Z: -2.8, Max Z: -1.6, Min Y: 1, Max Y: 2.2
- ButtonPos_YMax:setNumber(8,2.2)
- ButtonPos_YMin:setNumber(8,1)
- ButtonPos_ZMax:setNumber(8,-1.6)
- ButtonPos_ZMin:setNumber(8,-2.8)
- # Number 7 - Min Z: -4.5, Max Z: -3.4, Min Y: -2.1, Max Y: -1
- ButtonPos_YMax:setNumber(9,-1)
- ButtonPos_YMin:setNumber(9,-2.1)
- ButtonPos_ZMax:setNumber(9,-3.4)
- ButtonPos_ZMin:setNumber(9,-4.5)
- # Number 8 - Min Z: -4.5, Max Z: -3.4, Min Y: -0.6, Max Y: 0.6
- ButtonPos_YMax:setNumber(10,0.6)
- ButtonPos_YMin:setNumber(10,-0.6)
- ButtonPos_ZMax:setNumber(10,-3.4)
- ButtonPos_ZMin:setNumber(10,-4.5)
- # Number 9 - Min Z: -4.5, Max Z: -3.4, Min Y: 1, Max Y: 2.2
- ButtonPos_YMax:setNumber(11,2.2)
- ButtonPos_YMin:setNumber(11,1)
- ButtonPos_ZMax:setNumber(11,-3.4)
- ButtonPos_ZMin:setNumber(11,-4.5)
- # Notes on button positions #
- # X is always 1 whilst aiming at the keypad
- # Z - Vertical
- # Y - Horizontal
- # Z - Max 5.5 (Top), Min -5.5 (Bottom)
- # Y - Max 3 (Left) , Min -3 (Right)
- # Number 1 - Min Z: -1.3, Max Z: -0.1, Min Y: -2.1, Max Y: -1
- # Number 2 - Min Z: -1.3, Max Z: -0.1, Min Y: -0.6, Max Y: 0.6
- # Number 3 - Min Z: -1.3, Max Z: -0.1, Min Y: 1, Max Y: 2.2
- # Number 4 - Min Z: -2.8, Max Z: -1.6, Min Y: -2.1, Max Y: -1
- # Number 5 - Min Z: -2.8, Max Z: -1.6, Min Y: -0.6, Max Y: 0.6
- # Number 6 - Min Z: -2.8, Max Z: -1.6, Min Y: 1, Max Y: 2.2
- # Number 7 - Min Z: -4.6, Max Z: -3.3, Min Y: -2.1, Max Y: -1
- # Number 8 - Min Z: -4.6, Max Z: -3.3, Min Y: -0.6, Max Y: 0.6
- # Number 9 - Min Z: -4.6, Max Z: -3.3, Min Y: 1, Max Y: 2.2
- # Ok - Min Z: 0.3, Max Z: 1.5, Min Y: 0.3, Max Y: 2.2
- # Abort - Min Z: 0.3, Max Z: 1.6, Min Y: -2.2, Max Y: -0.2
- Find_Owners = 1
- Index_Find = 1
- Index_Search = 1
- Index_OwnerProx = 1
- }
- ## Function to find all of the owners of the stored keypads ##
- if (Find_Owners) {
- Owner = Keypad:entity(Index_Find):owner()
- Keypad_Owner:setEntity(Index_Find,Owner)
- if (Index_Find <= Keypad:count()) {
- Index_Find++
- }
- else {
- Find_Owners = 0
- Search = 1
- print("Owners Found")
- }
- }
- ## Search Function: Owner Close To Keypad ##
- if (Search & Keypad:count()) {
- if (Keypad:entity(Index_Search):owner():pos():distance(Keypad:entity(Index_Search):pos()) < 70 & Index_Search <= Keypad:count() & Search & Keypad:entity(Index_Search):id()) {
- Owner_Monitoring = Keypad:entity(Index_Search):owner()
- Keypad_Monitoring = Keypad:entity(Index_Search)
- print(Owner_Monitoring:name() + " Now Been Monitored")
- Search = 0
- Monitor = 1
- Index_Int = 1
- Passcode = ""
- Index_PressedKey = 0
- Index_Decode = 1
- Index_Passcode = Keypad_Monitoring:id()
- }
- else {
- if (Index_Search <= Keypad:count() & Search) {
- Index_Search++
- }
- elseif (Index_Search > Keypad:count() & Search){
- Index_Search = 1
- }
- if (!Keypad:entity(Index_Search):id()) {
- Keypad:remove(Index_Search)
- }
- }
- }
- else{
- if (Search) {
- print("No Keypads To Decode")
- Search = 0
- }
- }
- ## Monitoring & Recording Of Pressed Keys ##
- if (Monitor) {
- if (Owner_Monitoring:pos():distance(Keypad_Monitoring:pos()) < 70) {
- AntiSpam = Owner_Monitoring:keyUse()
- if (round(Keypad_Monitoring:toLocal(Owner_Monitoring:aimPos()):x()) == 1 & Owner_Monitoring:keyUse() & $AntiSpam == 1) {
- if (!Decode) {
- Decode = 1
- Index_Int = 1
- }
- Index_PressedKey++
- Keypad_PressedY:setNumber(Index_PressedKey,Keypad_Monitoring:toLocal(Owner_Monitoring:aimPos()):y())
- Keypad_PressedZ:setNumber(Index_PressedKey,Keypad_Monitoring:toLocal(Owner_Monitoring:aimPos()):z())
- }
- if (Decode) {
- if (
- Keypad_PressedY:number(Index_Decode) <= ButtonPos_YMax:number(Index_Int) &
- Keypad_PressedY:number(Index_Decode) >= ButtonPos_YMin:number(Index_Int) &
- Keypad_PressedZ:number(Index_Decode) <= ButtonPos_ZMax:number(Index_Int) &
- Keypad_PressedZ:number(Index_Decode) >= ButtonPos_ZMin:number(Index_Int) &
- Index_Int != 12
- ) {
- if (Index_Int == 1) {
- print("Ok Has Been Pressed,Passcode Found.")
- Keypad_PressedY:remove(Index_Decode)
- Keypad_PressedZ:remove(Index_Decode)
- Decode = 0
- Monitor = 0
- Search = 1
- Index_Decoded++
- Keypad_Decoded:setEntity(Index_Decoded,Keypad_Monitoring)
- Keypad:removeEntity(Index_Search)
- Index_Search = 1
- }
- elseif (Index_Int == 2) {
- Keypad_StoredPasscodes:setString(Index_Passcode,"")
- Passcode = ""
- print("Abort Has Been Pressed")
- Keypad_PressedY:remove(Index_Decode)
- Keypad_PressedZ:remove(Index_Decode)
- }
- elseif (Index_Int > 2 & Passcode:length() <= 4) {
- Passcode += toString(Index_Int - 2)
- print("Number " + toString(Index_Int - 2) + " Has Been Pressed")
- Keypad_StoredPasscodes:setString(Index_Passcode,Passcode)
- Keypad_PressedY:remove(Index_Decode)
- Keypad_PressedZ:remove(Index_Decode)
- }
- else {
- Passcode = ""
- Keypad_StoredPasscodes:setString(Index_Passcode,Passcode)
- Keypad_PressedY:remove(Index_Decode)
- Keypad_PressedZ:remove(Index_Decode)
- print("Invalid Passcode Length, Resetting Passcode.")
- Decode = 0
- Monitor = 0
- Search = 1
- }
- if (!Keypad_PressedY:count() & !Keypad_PressedZ:count()) {
- Decode = 0
- Index_PressedKey = 0
- Index_Decode = 1
- Index_Int = 1
- }
- else {
- if (Index_Decode > Keypad_PressedY:count() & Decode) {
- Index_Decode = 1
- }
- else{
- Index_Decode++
- }
- }
- }
- else {
- if (Index_Int < 12) {
- Index_Int++
- }
- else{
- Index_Int = 1
- }
- }
- }
- }
- else{
- Monitor = 0
- Search = 1
- Decode = 0
- Keypad_PressedY = array()
- Keypad_PressedZ = array()
- Index_Search = 1
- print("Monitoring Ended: Target Too Far From Keypad")
- }
- }
- ## Search Function: SoundKiller Close To Foreign Keypad ##
- if (Keypad_Decoded:count() & !CoolDown) {
- if (owner():pos():distance(Keypad_Decoded:entity(Index_OwnerProx):pos()) < 100 & !CoolDown) {
- hint(Keypad_StoredPasscodes:string(Keypad_Decoded:entity(Index_OwnerProx):id()),20)
- timer("cooldown",10000)
- CoolDown = 1
- }
- else{
- if (Index_OwnerProx < Keypad_Decoded:count()) {
- Index_OwnerProx++
- }
- else {
- Index_OwnerProx = 1
- }
- }
- }
- if (clk("cooldown")) {
- CoolDown = 0
- }
- ## Keypad Rechecking ##
- if (clk("recheck") | chatClk(owner()) & lastSaid() == "rescan") {
- Search = 0
- findByModel("models/props_lab/keypad.mdl")
- Keypad_New = findToArray()
- if (Keypad_New:count()) {
- RecheckArrayCreation = 1
- Keypad_Recheck = array()
- Keypad_Recheck = Keypad:clone()
- Index_Recheck_Index = Keypad_Recheck:count() + 1
- Index_Recheck = 1
- Index_Compare = 1
- Index_New = 1
- Index_AddNewKeypads = Keypad:count()
- TotalNewKeypads = 0
- Method_Check = 1
- Method_AddRemaining = 0
- Index_Add = Keypad:count() + 1
- Index_NewCycle = 1
- print("New Keypads Found")
- }
- else {
- Search = 1
- timer("recheck",300000)
- print("No Keypads Found")
- }
- }
- if (RecheckArrayCreation) {
- if (Keypad_Decoded:count()) {
- Keypad_Recheck:setEntity(Index_Recheck_Index,Keypad_Decoded:entity(Index_Recheck))
- Index_Recheck_Index++
- Index_Recheck++
- if (Index_Recheck > Keypad_Decoded:count()) {
- RecheckArrayCreation = 0
- AddNewKeypads = 1
- }
- }
- else {
- RecheckArrayCreation = 0
- AddNewKeypads = 1
- }
- }
- if (Keypad_New:count() & AddNewKeypads) {
- if (Keypad_Recheck:entity(Index_Compare):id() == Keypad_New:entity(Index_New):id() & Method_Check) {
- Keypad_New:remove(Index_New)
- Index_New = 1
- Index_Compare++
- if (Keypad_Recheck:entity(Index_Compare) == noentity() & Keypad_New:count()) {
- Method_Check = 0
- Method_AddRemaining = 1
- }
- }
- elseif (Keypad_Recheck:entity(Index_Compare):id() != Keypad_New:entity(Index_New):id() & Method_Check) {
- if (Index_New > Keypad_New:count()) {
- Index_AddNewKeypads++
- Keypad:setEntity(Index_AddNewKeypads,Keypad_New:entity(Index_New))
- Keypad_New:remove(Index_New)
- TotalNewKeypads++
- Index_Compare++
- Index_New = 1
- if (Keypad_Recheck:entity(Index_Compare) == noentity() & Keypad_New:count() & Method_Check) {
- Method_Check = 0
- Method_AddRemaining = 1
- }
- }
- else {
- Index_New++
- }
- }
- if (Method_AddRemaining) {
- Keypad:setEntity(Index_Add,Keypad_New:entity(1))
- Keypad_New:remove(1)
- Index_Add++
- Index_NewCycle++
- TotalNewKeypads++
- if (!Keypad_New:count()) {
- Method_AddRemaining = 0
- }
- }
- }
- elseif (!Keypad_New:count() & AddNewKeypads) {
- AddNewKeypads = 0
- Search = 1
- timer("recheck",300000)
- print(toString(TotalNewKeypads) + " New Keypads Found")
- }
- ## Wrong / Invalid Password Reset Function ##
- if (chatClk(owner()) & lastSaid() == "wrong") {
- WrongCode = 1
- Index_WrongCode = 1
- Index_Decoded--
- WrongKeypad = owner():aimEntity()
- if (Keypad:count()) {
- Keypad:setEntity(Keypad:count() + 1,owner():aimEntity())
- }
- else {
- Keypad:setEntity(1,owner():aimEntity())
- }
- Keypad_StoredPasscodes:setString(WrongKeypad:id(),"")
- }
- if (WrongCode) {
- if (Keypad_Decoded:entity(Index_WrongCode):id() == WrongKeypad:id()) {
- Keypad_Decoded:remove(Index_WrongCode)
- WrongCode = 0
- Search = 1
- }
- else {
- if (Index_WrongCode < Keypad:count()) {
- Index_WrongCode++
- }
- else {
- WrongCode = 0
- Search = 1
- }
- }
- }
- ## Debugging Functions ##
- if (chatClk(owner())) {
- if (lastSaid() == "debug") {
- timer("print owners",250)
- }
- }
- if (clk("print owners")) {
- Debug_Owners = 1
- Debug_Index = 0
- }
- if (Debug_Owners) {
- if (Debug_Index <= Keypad_Owner:count()) {
- Debug_Index++
- print(Keypad:entity(Debug_Index):owner():name())
- }
- else {
- print("Number Of Keypads Found: " + toString(Keypad:count()))
- printTable(Keypad_StoredPasscodes)
- print("Debugging Complete")
- Debug_Owners = 0
- }
- }
- #AimPos = owner():aimPos()
- #LocalAimPos = entity():isWeldedTo():toLocal(AimPos)
- #DistanceFromKeypad = owner():pos():distance(entity():isWeldedTo():pos())
Add Comment
Please, Sign In to add comment