My bad. xp
...You know I just realized that the player has the choice of teleporting somewhere...xD
Well, I don't know how you can tell if a tile is a wall or something through eventing... (I'm assuming this can be easily done with scripting, I just don't know what to do xD)
For the variable and maximum dimension case though... Please note that this method might not be the most optimized way of doing this, but it's just my way. Perhaps there's better methods to tackling this on, as my experience with RMXP has been rather ancient.
I'm not screenshotting this since, well, I don't have a common event. :V
For every map, there would be a Parallel Process event that will set the variables for max.x and max.y. max.x and max.y will be the dimensions of each map (So for a 20x15 map, max.x and max.y will be 20 and 15 respectively). After those variables have been set, on the Common Event screen...
Note that the Common Event screen should have no triggers whatsoever. It'll be launched from a Skill, so using the skill will call the Common Event anyway, right?
Anyway, what you first want to do...
Make a loop. This will be if the player decides to be a herpderp and have coordinates that are OVER the max.x and max.y or the tile's going to fall on a wall.
Loop
[Input Number... for player.x
Input Number... for player.y
(player.x and player.y will be the player's choice for what place they want to go to.)
Conditional Branch checking if player.x and player.y is bigger than max.x and max.y:
If yes then
Message: It's too big, blah blah.
Else
Conditional Branch checking if player.x and player.y is not landing on a wall tile:
(This one is difficult. The only thing I can think of would be done through a script. My idea is this. This script snippet checks if a certain tile in the map scene has a certain terrain tag. If it does, then it yields true; if not, it's false.)
If yes then
Message: You can't access that spot.
Else
Break Loop] (Break Loop will skip Repeat Above and move on to the next Event command)
Repeat Above (This is just what the Loop would do if player.x and player.y were too big or fell on a wall tile)
Then with a Call Script for what Transfer Player is... (That's inside the Script Editor somewhere in the Game_Interpreter)
Blah blah blah blah. I think we may need to set the Map ID to another variable to accommodate for this too.
It can be done with common events, but I think you need scriplets, like call scripts and all that. :/
It can probably be done with Eventing, but not as convenient though. O_O