ID:166236
 
I'm testing a teleport ability in my game right now. What it does is it teleports a player three steps ahead. However, players can teleport off the map completely. How can I avoid this?
explain it better, do you want a teleport code?
Ok this is mine i have...

<code> mob verb TeleportSettings() set category="Fighting" set hidden=0 var/prompt_title = "Direction" var/help_text = "Select a Which direction X=left and right Y= up and down." var/list/tele = list("X","Y") var/default_value = "X" var/char_tele = input(usr, help_text, prompt_title, default_value) in tele switch(char_tele) if("X") var/prompt_titlet = "Selection" var/help_textt = "Select How Much." var/list/teledir = list("+1","+2","-1","-2","0","Back and Fourth","Fourth and Back") var/default_valuee = "+1" var/char_teledir = input(usr, help_textt, prompt_titlet, default_valuee) in teledir switch(char_teledir) if("Back and Fourth") usr.teledir=5 if("Fourth and Back") usr.teledir=6 if("0") usr.teledir=0 if("+1") usr.teledir=1 if("+2") usr.teledir=2 if("-1") usr.teledir=3 if("-2") usr.teledir=4 if("Y") var/prompt_titlee = "Trans Point" var/help_texte = "Select How Much." var/list/teledirr = list("+1","+2","-1","-2","0","Up then Down","Down then Up") var/default_valuet = "+1" var/char_teledirr = input(usr, help_texte, prompt_titlee, default_valuet) in teledirr switch(char_teledirr) if("Down then Up") usr.teledirr=6 if("Up then Down") usr.teledirr=5 if("0") usr.teledirr=0 if("+1") usr.teledirr=1 if("+2") usr.teledirr=2 if("-1") usr.teledirr=3 if("-2") usr.teledirr=4 mob verb Teleport() set category="Fighting" set hidden=0 view()<<sound('shunkanido.wav') if(usr.teledir==0) flick("IT",usr) usr.loc=locate(x,y,z) if(usr.teledirr==6) flick("IT",usr) usr.loc=locate(x,usr.y-2,z) sleep(25) flick("IT",usr) usr.loc=locate(x,usr.y+2,z) if(usr.teledir==6) flick("IT",usr) usr.loc=locate(x+2,usr.y,z) sleep(25) flick("IT",usr) usr.loc=locate(x-2,usr.y,z) if(usr.teledirr==5) flick("IT",usr) usr.loc=locate(x,usr.y+2,z) sleep(25) flick("IT",usr) usr.loc=locate(x,usr.y-2,z) if(usr.teledir==5) flick("IT",usr) usr.loc=locate(usr.x-2,y,z) sleep(25) flick("IT",usr) usr.loc=locate(usr.x+2,y,z) if(usr.teledirr==0) flick("IT",usr) usr.loc=locate(x,y,z) if(usr.teledir==1) flick("IT",usr) usr.loc=locate(usr.x+1,y,z) if(usr.teledir==2) flick("IT",usr) usr.loc=locate(usr.x+2,y,z) if(usr.teledir==3) flick("IT",usr) usr.loc=locate(usr.x-1,y,z) if(usr.teledir==4) flick("IT",usr) usr.loc=locate(usr.x-2,y,z) if(usr.teledirr==1) flick("IT",usr) usr.loc=locate(x,usr.y+1,z) if(usr.teledirr==2) flick("IT",usr) usr.loc=locate(x,usr.y+2,z) if(usr.teledirr==3) flick("IT",usr) usr.loc=locate(x,usr.y-2,z) if(usr.teledirr==4) flick("IT",usr) usr.loc=locate(x,usr.y-2,z)
In response to Xx Dark Wizard xX
I have a code that uses get_step 3 times, and then teleports the player there, but the problem is that you can teleport off the map if you're near the edge.
In response to Seraphrevan
hmm maby this..
<code> proc Check() while(src) var/turf/T = get_step(src,src.dir) if(!T) if(src) step(src,dir,)