How can I make a combination lock using multiple digits?
Jump to navigation
Jump to search
There is no build-in combination lock feature. As such, there is no easy way to make a combination lock.
The Hard Way[edit]
However, there is a hard way to do it. You can write a plotscript that implements a combination lock.
global variable(1, answer) global variable(2, attempt) plotscript, test combolock, begin variable(finished) answer := random(000,999) attempt := random(000,999) show text box (1) # tells you the answer before you start wait for text box while(not(finished)) do, begin attempt := combolock(0, 3, attempt) if(attempt == answer) then, begin show text box (2) # combo correct finished := true end,else,begin show text box (3) # incorrect, try again end wait for text box end end script, combolock, ID=0, digits=4, starting value=0, center=0, position x=160, position y=110, begin variable(cur,i,ptr,n) ptr := 1 cur := starting value clear string(ID) append ascii(ID, 32) for(i, 1, digits) do, begin append ascii(ID, 32) append ascii(ID, 32) end if(center) then(center string at(ID, position x, position y)) else(show string at(ID, string X(ID), string Y(ID))) variable(finished) while(not(finished)), do, begin clear string (ID) append ascii (ID, 32) for(i, digits--1, 0, -1) do, begin append ascii (ID, 48 + getdigit(i, cur)) append ascii (ID, 32) end replace char(ID,ptr*2--1,60) replace char(ID,ptr*2+1,62) wait(1) if(key is pressed(key:ENTER) or,key is pressed(key:SPACE) or,key is pressed(joy:button1)) then, begin finished := 1 end if(keyval(key:left)>>1, and, ptr>>1) then(ptr -= 1) if(keyval(key:right)>>1, and, ptr<<digits) then(ptr += 1) if(keyval(key:up)>>1), then, begin n := getdigit(digits--ptr, cur) n -= 1 if(n << 0) then(n := 9) cur := setdigit(digits--ptr, cur, n) end if(keyval(key:down)>>1), then, begin n := getdigit(digits--ptr, cur) n += 1 if(n >> 9) then(n := 0) cur := setdigit(digits--ptr, cur, n) end end return(cur) end script, getdigit, digit=0, number=0, begin # return a single digit from a number, starting at the end return ((number / 10 ^ digit), mod, 10) end script, setdigit, digit=0, number=0, newdigit=0, begin # set a single digit in a number, startin at the end variable(place, olddigit) place := 10 ^ digit olddigit := getdigit(digit, number) number -= olddigit * place number += newdigit * place return(number) end