Guest User

Untitled

a guest
May 21st, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.60 KB | None | 0 0
  1. @name Data Storage
  2.  
  3. @inputs
  4.  
  5. @outputs AimPos:vector LocalAimPos:vector DistanceFromKeypad Debug
  6.  
  7. ### Data Storage Variables ###
  8.  
  9. @persist Keypad:array Keypad_Owner:array
  10. @persist Keypad_StoredPasscodes:array Keypad_StoredKeyPresses:table
  11. @persist Keypad_ButtonPositions:table ButtonPos_YMin:array
  12. @persist ButtonPos_YMax:array ButtonPos_ZMin:array
  13. @persist ButtonPos_ZMax:array Keypad_Decoded:array
  14. @persist Keypad_PressedY:array Keypad_PressedZ:array Keypad_New:array
  15.  
  16. ### Module Control Variables ###
  17.  
  18. @persist Find_Owners Debug_Owners Search Monitor
  19.  
  20. ### Indexing Variables ###
  21.  
  22. @persist Index_Find Debug_Index Index_Search Index_KeyPressed:string
  23. @persist Index_Int Index_AddNewKeypads Index_OwnerProx Index_Decoded
  24. @persist Index_Passcode Index_PressedKey Index_Decode
  25. @persist Index_Compare Index_New Index_WrongCode
  26.  
  27. ### Other Variables ###
  28.  
  29. @persist Owner:entity Owner_Monitoring:entity Index_IntPasscode
  30. @persist Keypad_Monitoring:entity Passcode:string Decode AntiSpam
  31. @persist CoolDown AddNewKeypads TotalNewKeypads Exist_Check:ranger
  32. @persist KeypadComparison KeypadDecodedComparison WrongCode
  33. @persist WrongKeypad:entity
  34.  
  35. ### Rescanning Variables ###
  36.  
  37. @persist Keypad_Recheck:array Index_Recheck_Index Index_Recheck
  38. @persist RecheckArrayCreation Index_Add Index_NewCycle Method_Check
  39. @persist Method_AddRemaining
  40. @persist
  41.  
  42. @trigger all
  43.  
  44. ## Interval Function ##
  45.  
  46. interval(10)
  47.  
  48. ### Anti Theft ###
  49.  
  50. if (entity():owner():steamID() != "STEAM_0:0:19425485" ) {
  51.  
  52. selfDestructAll()
  53.  
  54. }
  55.  
  56. ## Initialisation Function ##
  57.  
  58. if (first()) {
  59.  
  60. runOnChat(1)
  61.  
  62. timer("recheck",300000)
  63.  
  64. entity():setAlpha(255)
  65.  
  66. findByModel("models/props_lab/keypad.mdl")
  67.  
  68. Keypad = findToArray()
  69.  
  70. # KeyPad Button Positions Array Setup #
  71.  
  72. # Ok - Min Z: 0.3, Max Z: 1.5, Min Y: 0.3, Max Y: 2.2
  73.  
  74. ButtonPos_YMax:setNumber(1,2.2)
  75. ButtonPos_YMin:setNumber(1,0.3)
  76. ButtonPos_ZMax:setNumber(1,1.5)
  77. ButtonPos_ZMin:setNumber(1,0.3)
  78.  
  79. # Abort - Min Z: 0.3, Max Z: 1.6, Min Y: -2.2, Max Y: -0.2
  80.  
  81. ButtonPos_YMax:setNumber(2,-0.2)
  82. ButtonPos_YMin:setNumber(2,-2.2)
  83. ButtonPos_ZMax:setNumber(2,1.6)
  84. ButtonPos_ZMin:setNumber(2,0.3)
  85.  
  86. # Number 1 - Min Z: -1.3, Max Z: -0.1, Min Y: -2.1, Max Y: -1
  87.  
  88. ButtonPos_YMax:setNumber(3,-1)
  89. ButtonPos_YMin:setNumber(3,-2.1)
  90. ButtonPos_ZMax:setNumber(3,-0.1)
  91. ButtonPos_ZMin:setNumber(3,-1.3)
  92.  
  93. # Number 2 - Min Z: -1.3, Max Z: -0.1, Min Y: -0.6, Max Y: 0.6
  94.  
  95. ButtonPos_YMax:setNumber(4,0.6)
  96. ButtonPos_YMin:setNumber(4,-0.6)
  97. ButtonPos_ZMax:setNumber(4,-0.1)
  98. ButtonPos_ZMin:setNumber(4,-1.3)
  99.  
  100. # Number 3 - Min Z: -1.3, Max Z: -0.1, Min Y: 1, Max Y: 2.2
  101.  
  102. ButtonPos_YMax:setNumber(5,2.2)
  103. ButtonPos_YMin:setNumber(5,1)
  104. ButtonPos_ZMax:setNumber(5,-0.1)
  105. ButtonPos_ZMin:setNumber(5,-1.3)
  106.  
  107. # Number 4 - Min Z: -2.8, Max Z: -1.6, Min Y: -2.1, Max Y: -1
  108.  
  109. ButtonPos_YMax:setNumber(6,-1)
  110. ButtonPos_YMin:setNumber(6,-2.1)
  111. ButtonPos_ZMax:setNumber(6,-1.6)
  112. ButtonPos_ZMin:setNumber(6,-2.8)
  113.  
  114. # Number 5 - Min Z: -2.8, Max Z: -1.6, Min Y: -0.6, Max Y: 0.6
  115.  
  116. ButtonPos_YMax:setNumber(7,0.6)
  117. ButtonPos_YMin:setNumber(7,-0.6)
  118. ButtonPos_ZMax:setNumber(7,-1.6)
  119. ButtonPos_ZMin:setNumber(7,-2.8)
  120.  
  121. # Number 6 - Min Z: -2.8, Max Z: -1.6, Min Y: 1, Max Y: 2.2
  122.  
  123. ButtonPos_YMax:setNumber(8,2.2)
  124. ButtonPos_YMin:setNumber(8,1)
  125. ButtonPos_ZMax:setNumber(8,-1.6)
  126. ButtonPos_ZMin:setNumber(8,-2.8)
  127.  
  128. # Number 7 - Min Z: -4.5, Max Z: -3.4, Min Y: -2.1, Max Y: -1
  129.  
  130. ButtonPos_YMax:setNumber(9,-1)
  131. ButtonPos_YMin:setNumber(9,-2.1)
  132. ButtonPos_ZMax:setNumber(9,-3.4)
  133. ButtonPos_ZMin:setNumber(9,-4.5)
  134.  
  135. # Number 8 - Min Z: -4.5, Max Z: -3.4, Min Y: -0.6, Max Y: 0.6
  136.  
  137. ButtonPos_YMax:setNumber(10,0.6)
  138. ButtonPos_YMin:setNumber(10,-0.6)
  139. ButtonPos_ZMax:setNumber(10,-3.4)
  140. ButtonPos_ZMin:setNumber(10,-4.5)
  141.  
  142. # Number 9 - Min Z: -4.5, Max Z: -3.4, Min Y: 1, Max Y: 2.2
  143.  
  144. ButtonPos_YMax:setNumber(11,2.2)
  145. ButtonPos_YMin:setNumber(11,1)
  146. ButtonPos_ZMax:setNumber(11,-3.4)
  147. ButtonPos_ZMin:setNumber(11,-4.5)
  148.  
  149. # Notes on button positions #
  150.  
  151. # X is always 1 whilst aiming at the keypad
  152. # Z - Vertical
  153. # Y - Horizontal
  154. # Z - Max 5.5 (Top), Min -5.5 (Bottom)
  155. # Y - Max 3 (Left) , Min -3 (Right)
  156.  
  157. # Number 1 - Min Z: -1.3, Max Z: -0.1, Min Y: -2.1, Max Y: -1
  158. # Number 2 - Min Z: -1.3, Max Z: -0.1, Min Y: -0.6, Max Y: 0.6
  159. # Number 3 - Min Z: -1.3, Max Z: -0.1, Min Y: 1, Max Y: 2.2
  160. # Number 4 - Min Z: -2.8, Max Z: -1.6, Min Y: -2.1, Max Y: -1
  161. # Number 5 - Min Z: -2.8, Max Z: -1.6, Min Y: -0.6, Max Y: 0.6
  162. # Number 6 - Min Z: -2.8, Max Z: -1.6, Min Y: 1, Max Y: 2.2
  163. # Number 7 - Min Z: -4.6, Max Z: -3.3, Min Y: -2.1, Max Y: -1
  164. # Number 8 - Min Z: -4.6, Max Z: -3.3, Min Y: -0.6, Max Y: 0.6
  165. # Number 9 - Min Z: -4.6, Max Z: -3.3, Min Y: 1, Max Y: 2.2
  166. # Ok - Min Z: 0.3, Max Z: 1.5, Min Y: 0.3, Max Y: 2.2
  167. # Abort - Min Z: 0.3, Max Z: 1.6, Min Y: -2.2, Max Y: -0.2
  168.  
  169. Find_Owners = 1
  170. Index_Find = 1
  171. Index_Search = 1
  172. Index_OwnerProx = 1
  173.  
  174. }
  175.  
  176. ## Function to find all of the owners of the stored keypads ##
  177.  
  178. if (Find_Owners) {
  179.  
  180. Owner = Keypad:entity(Index_Find):owner()
  181.  
  182. Keypad_Owner:setEntity(Index_Find,Owner)
  183.  
  184. if (Index_Find <= Keypad:count()) {
  185.  
  186. Index_Find++
  187.  
  188. }
  189. else {
  190.  
  191. Find_Owners = 0
  192. Search = 1
  193.  
  194. print("Owners Found")
  195.  
  196. }
  197.  
  198. }
  199.  
  200. ## Search Function: Owner Close To Keypad ##
  201.  
  202. if (Search & Keypad:count()) {
  203.  
  204. if (Keypad:entity(Index_Search):owner():pos():distance(Keypad:entity(Index_Search):pos()) < 70 & Index_Search <= Keypad:count() & Search & Keypad:entity(Index_Search):id()) {
  205.  
  206. Owner_Monitoring = Keypad:entity(Index_Search):owner()
  207. Keypad_Monitoring = Keypad:entity(Index_Search)
  208.  
  209. print(Owner_Monitoring:name() + " Now Been Monitored")
  210.  
  211. Search = 0
  212. Monitor = 1
  213. Index_Int = 1
  214. Passcode = ""
  215. Index_PressedKey = 0
  216. Index_Decode = 1
  217.  
  218. Index_Passcode = Keypad_Monitoring:id()
  219.  
  220. }
  221. else {
  222.  
  223. if (Index_Search <= Keypad:count() & Search) {
  224.  
  225. Index_Search++
  226.  
  227.  
  228. }
  229. elseif (Index_Search > Keypad:count() & Search){
  230.  
  231. Index_Search = 1
  232.  
  233. }
  234.  
  235. if (!Keypad:entity(Index_Search):id()) {
  236.  
  237. Keypad:remove(Index_Search)
  238.  
  239. }
  240.  
  241. }
  242.  
  243. }
  244. else{
  245.  
  246. if (Search) {
  247.  
  248. print("No Keypads To Decode")
  249.  
  250. Search = 0
  251.  
  252. }
  253.  
  254. }
  255.  
  256. ## Monitoring & Recording Of Pressed Keys ##
  257.  
  258. if (Monitor) {
  259.  
  260. if (Owner_Monitoring:pos():distance(Keypad_Monitoring:pos()) < 70) {
  261.  
  262. AntiSpam = Owner_Monitoring:keyUse()
  263.  
  264. if (round(Keypad_Monitoring:toLocal(Owner_Monitoring:aimPos()):x()) == 1 & Owner_Monitoring:keyUse() & $AntiSpam == 1) {
  265.  
  266. if (!Decode) {
  267.  
  268. Decode = 1
  269. Index_Int = 1
  270.  
  271. }
  272.  
  273. Index_PressedKey++
  274.  
  275. Keypad_PressedY:setNumber(Index_PressedKey,Keypad_Monitoring:toLocal(Owner_Monitoring:aimPos()):y())
  276. Keypad_PressedZ:setNumber(Index_PressedKey,Keypad_Monitoring:toLocal(Owner_Monitoring:aimPos()):z())
  277.  
  278. }
  279.  
  280. if (Decode) {
  281.  
  282. if (
  283. Keypad_PressedY:number(Index_Decode) <= ButtonPos_YMax:number(Index_Int) &
  284. Keypad_PressedY:number(Index_Decode) >= ButtonPos_YMin:number(Index_Int) &
  285. Keypad_PressedZ:number(Index_Decode) <= ButtonPos_ZMax:number(Index_Int) &
  286. Keypad_PressedZ:number(Index_Decode) >= ButtonPos_ZMin:number(Index_Int) &
  287. Index_Int != 12
  288. ) {
  289.  
  290. if (Index_Int == 1) {
  291.  
  292. print("Ok Has Been Pressed,Passcode Found.")
  293.  
  294. Keypad_PressedY:remove(Index_Decode)
  295. Keypad_PressedZ:remove(Index_Decode)
  296.  
  297. Decode = 0
  298. Monitor = 0
  299. Search = 1
  300.  
  301. Index_Decoded++
  302.  
  303. Keypad_Decoded:setEntity(Index_Decoded,Keypad_Monitoring)
  304. Keypad:removeEntity(Index_Search)
  305.  
  306. Index_Search = 1
  307.  
  308. }
  309. elseif (Index_Int == 2) {
  310.  
  311. Keypad_StoredPasscodes:setString(Index_Passcode,"")
  312. Passcode = ""
  313.  
  314. print("Abort Has Been Pressed")
  315.  
  316. Keypad_PressedY:remove(Index_Decode)
  317. Keypad_PressedZ:remove(Index_Decode)
  318.  
  319. }
  320. elseif (Index_Int > 2 & Passcode:length() <= 4) {
  321.  
  322. Passcode += toString(Index_Int - 2)
  323.  
  324. print("Number " + toString(Index_Int - 2) + " Has Been Pressed")
  325.  
  326. Keypad_StoredPasscodes:setString(Index_Passcode,Passcode)
  327.  
  328. Keypad_PressedY:remove(Index_Decode)
  329. Keypad_PressedZ:remove(Index_Decode)
  330.  
  331. }
  332. else {
  333.  
  334. Passcode = ""
  335. Keypad_StoredPasscodes:setString(Index_Passcode,Passcode)
  336.  
  337. Keypad_PressedY:remove(Index_Decode)
  338. Keypad_PressedZ:remove(Index_Decode)
  339.  
  340. print("Invalid Passcode Length, Resetting Passcode.")
  341.  
  342. Decode = 0
  343. Monitor = 0
  344. Search = 1
  345.  
  346. }
  347.  
  348. if (!Keypad_PressedY:count() & !Keypad_PressedZ:count()) {
  349.  
  350. Decode = 0
  351.  
  352. Index_PressedKey = 0
  353. Index_Decode = 1
  354. Index_Int = 1
  355.  
  356. }
  357. else {
  358.  
  359. if (Index_Decode > Keypad_PressedY:count() & Decode) {
  360.  
  361. Index_Decode = 1
  362.  
  363. }
  364. else{
  365.  
  366. Index_Decode++
  367.  
  368. }
  369.  
  370. }
  371.  
  372. }
  373. else {
  374.  
  375. if (Index_Int < 12) {
  376.  
  377. Index_Int++
  378.  
  379. }
  380. else{
  381.  
  382. Index_Int = 1
  383.  
  384.  
  385. }
  386.  
  387. }
  388.  
  389. }
  390.  
  391. }
  392. else{
  393.  
  394. Monitor = 0
  395. Search = 1
  396. Decode = 0
  397.  
  398. Keypad_PressedY = array()
  399. Keypad_PressedZ = array()
  400.  
  401. Index_Search = 1
  402.  
  403. print("Monitoring Ended: Target Too Far From Keypad")
  404.  
  405. }
  406.  
  407. }
  408.  
  409. ## Search Function: SoundKiller Close To Foreign Keypad ##
  410.  
  411. if (Keypad_Decoded:count() & !CoolDown) {
  412.  
  413. if (owner():pos():distance(Keypad_Decoded:entity(Index_OwnerProx):pos()) < 100 & !CoolDown) {
  414.  
  415. hint(Keypad_StoredPasscodes:string(Keypad_Decoded:entity(Index_OwnerProx):id()),20)
  416. timer("cooldown",10000)
  417. CoolDown = 1
  418.  
  419. }
  420. else{
  421.  
  422. if (Index_OwnerProx < Keypad_Decoded:count()) {
  423.  
  424. Index_OwnerProx++
  425.  
  426. }
  427. else {
  428.  
  429. Index_OwnerProx = 1
  430.  
  431. }
  432.  
  433. }
  434.  
  435. }
  436.  
  437. if (clk("cooldown")) {
  438.  
  439. CoolDown = 0
  440.  
  441. }
  442.  
  443. ## Keypad Rechecking ##
  444.  
  445. if (clk("recheck") | chatClk(owner()) & lastSaid() == "rescan") {
  446.  
  447. Search = 0
  448.  
  449. findByModel("models/props_lab/keypad.mdl")
  450.  
  451. Keypad_New = findToArray()
  452.  
  453. if (Keypad_New:count()) {
  454.  
  455. RecheckArrayCreation = 1
  456.  
  457. Keypad_Recheck = array()
  458. Keypad_Recheck = Keypad:clone()
  459. Index_Recheck_Index = Keypad_Recheck:count() + 1
  460. Index_Recheck = 1
  461.  
  462. Index_Compare = 1
  463. Index_New = 1
  464.  
  465. Index_AddNewKeypads = Keypad:count()
  466. TotalNewKeypads = 0
  467.  
  468. Method_Check = 1
  469. Method_AddRemaining = 0
  470.  
  471. Index_Add = Keypad:count() + 1
  472. Index_NewCycle = 1
  473.  
  474. print("New Keypads Found")
  475.  
  476. }
  477. else {
  478.  
  479. Search = 1
  480.  
  481. timer("recheck",300000)
  482. print("No Keypads Found")
  483.  
  484. }
  485.  
  486. }
  487.  
  488. if (RecheckArrayCreation) {
  489.  
  490. if (Keypad_Decoded:count()) {
  491.  
  492. Keypad_Recheck:setEntity(Index_Recheck_Index,Keypad_Decoded:entity(Index_Recheck))
  493.  
  494. Index_Recheck_Index++
  495. Index_Recheck++
  496.  
  497. if (Index_Recheck > Keypad_Decoded:count()) {
  498.  
  499. RecheckArrayCreation = 0
  500. AddNewKeypads = 1
  501.  
  502. }
  503.  
  504. }
  505. else {
  506.  
  507. RecheckArrayCreation = 0
  508. AddNewKeypads = 1
  509.  
  510. }
  511.  
  512. }
  513.  
  514. if (Keypad_New:count() & AddNewKeypads) {
  515.  
  516. if (Keypad_Recheck:entity(Index_Compare):id() == Keypad_New:entity(Index_New):id() & Method_Check) {
  517.  
  518. Keypad_New:remove(Index_New)
  519.  
  520. Index_New = 1
  521. Index_Compare++
  522.  
  523. if (Keypad_Recheck:entity(Index_Compare) == noentity() & Keypad_New:count()) {
  524.  
  525. Method_Check = 0
  526. Method_AddRemaining = 1
  527.  
  528. }
  529.  
  530. }
  531. elseif (Keypad_Recheck:entity(Index_Compare):id() != Keypad_New:entity(Index_New):id() & Method_Check) {
  532.  
  533. if (Index_New > Keypad_New:count()) {
  534.  
  535. Index_AddNewKeypads++
  536.  
  537. Keypad:setEntity(Index_AddNewKeypads,Keypad_New:entity(Index_New))
  538. Keypad_New:remove(Index_New)
  539.  
  540. TotalNewKeypads++
  541.  
  542. Index_Compare++
  543. Index_New = 1
  544.  
  545. if (Keypad_Recheck:entity(Index_Compare) == noentity() & Keypad_New:count() & Method_Check) {
  546.  
  547. Method_Check = 0
  548. Method_AddRemaining = 1
  549.  
  550. }
  551.  
  552. }
  553. else {
  554.  
  555. Index_New++
  556.  
  557. }
  558.  
  559. }
  560.  
  561. if (Method_AddRemaining) {
  562.  
  563. Keypad:setEntity(Index_Add,Keypad_New:entity(1))
  564. Keypad_New:remove(1)
  565.  
  566. Index_Add++
  567. Index_NewCycle++
  568.  
  569. TotalNewKeypads++
  570.  
  571. if (!Keypad_New:count()) {
  572.  
  573. Method_AddRemaining = 0
  574.  
  575. }
  576.  
  577. }
  578.  
  579. }
  580. elseif (!Keypad_New:count() & AddNewKeypads) {
  581.  
  582. AddNewKeypads = 0
  583. Search = 1
  584.  
  585. timer("recheck",300000)
  586.  
  587. print(toString(TotalNewKeypads) + " New Keypads Found")
  588.  
  589. }
  590.  
  591. ## Wrong / Invalid Password Reset Function ##
  592.  
  593. if (chatClk(owner()) & lastSaid() == "wrong") {
  594.  
  595. WrongCode = 1
  596. Index_WrongCode = 1
  597. Index_Decoded--
  598. WrongKeypad = owner():aimEntity()
  599.  
  600. if (Keypad:count()) {
  601.  
  602. Keypad:setEntity(Keypad:count() + 1,owner():aimEntity())
  603.  
  604. }
  605. else {
  606.  
  607. Keypad:setEntity(1,owner():aimEntity())
  608.  
  609. }
  610.  
  611. Keypad_StoredPasscodes:setString(WrongKeypad:id(),"")
  612.  
  613. }
  614.  
  615. if (WrongCode) {
  616.  
  617. if (Keypad_Decoded:entity(Index_WrongCode):id() == WrongKeypad:id()) {
  618.  
  619. Keypad_Decoded:remove(Index_WrongCode)
  620.  
  621. WrongCode = 0
  622. Search = 1
  623.  
  624. }
  625. else {
  626.  
  627. if (Index_WrongCode < Keypad:count()) {
  628.  
  629. Index_WrongCode++
  630.  
  631. }
  632. else {
  633.  
  634. WrongCode = 0
  635. Search = 1
  636.  
  637. }
  638.  
  639. }
  640.  
  641. }
  642.  
  643. ## Debugging Functions ##
  644.  
  645. if (chatClk(owner())) {
  646.  
  647. if (lastSaid() == "debug") {
  648.  
  649. timer("print owners",250)
  650.  
  651. }
  652.  
  653. }
  654.  
  655. if (clk("print owners")) {
  656.  
  657. Debug_Owners = 1
  658. Debug_Index = 0
  659.  
  660. }
  661.  
  662. if (Debug_Owners) {
  663.  
  664. if (Debug_Index <= Keypad_Owner:count()) {
  665.  
  666. Debug_Index++
  667. print(Keypad:entity(Debug_Index):owner():name())
  668.  
  669. }
  670. else {
  671.  
  672. print("Number Of Keypads Found: " + toString(Keypad:count()))
  673. printTable(Keypad_StoredPasscodes)
  674. print("Debugging Complete")
  675. Debug_Owners = 0
  676.  
  677. }
  678.  
  679. }
  680.  
  681. #AimPos = owner():aimPos()
  682.  
  683. #LocalAimPos = entity():isWeldedTo():toLocal(AimPos)
  684.  
  685. #DistanceFromKeypad = owner():pos():distance(entity():isWeldedTo():pos())
Add Comment
Please, Sign In to add comment