Frist Psot, so be relatively gentle!
IMO, there's a role for scripts even in a 3d MMO rpg. I've been lurking here in the forums for a couple of weeks now, learning about the game (reading other's thoughts on something is a wholly different way of learning than experience, and couples nicely with it) and I have to say that I LOVE what is being done here.
Some thoughts on how scripting can
enhance game-play:
1. Knowledge of the game mechanics enhances suspension of disbelief, a core to any role-playing game. Once you know automatically what is and isn't possible, the impossible things are unconciously weeded out of your thought processes. The prime example of this is that of a chess player considering moving a bishop. Without thinking about it, only the diagonal directions are considered, because in the world of chess, bishops can only go diagonally. Opening up scripting to players deepens their knowledge of the game. This can only be a good thing.
2. Scripting encourages active development. This is an open source project, and as such can use all the developers that it possibly can. Being able to see the source code is great, but there are many people who would love to help, but don't think their knowledge of programming is sufficient. Scripting does two things:
- Scripting allows people of lesser knowledge to help. Scripting languages are invariably easier to code in than the parent executable. There are strict limits on what actions can and cannot be performed and so on.
- Scripting teaches good programming practice. Scripting allows an entry point into development. By becoming familiar with scripting actions, when people DO eventually dive into the code and they see the function that was called when they executed an action, they have an inherent understanding of that function already.
- Scripting IS development. Scripting is and always has been a mini-game within MMOs, from DiKU muds to the most modern incarnations like WoW and EQ2. Allowing scripting enhances the game for everyone. It shows exploitable holes in the code logic, it automates some of the boring, repetative tasks &ct.
3. Using the same scripting language for mobs and players makes for a more dynamic environment. Players should not have the range of functions available to them that mobs have, of course; That is a given. However, instead of having to recode (and
then debug!) an entire executable, pulling mob actions out of the main program makes diagnosing and organising their actions and reactions MUCH easier. Players familiar with the range of options available to them via scripting will be much better equipped to help create dynamic and interesting mobs than someone who just jumps in.
4. Scripting allows actions that would be possible in a 'real' world that are made difficult because of the game interface. Attaching a /say command to a /cast command is a good thing, and enhances suspension of disbelief. Script functions like /TargetLowestPlayerHealth() and /Assist(PlayerName) allow for things that would be automatic in a 'real' world environment.
These are all very good reasons for allowing scripting, and I understand that there are some people who are - justifiably - afraid of having an army of 'bots overwhelming what is meant to be individual players interacting. There are some solutions to this issue, and some very good ones.
1. Movement. Movement should ALWAYS be under complete control of a PLAYER, never a script. There should never be any movement functions available to a player. You can't 'bot very well if you can't move.
2. Actions. One hardware event, one action. This one isn't has hard and fast as the above. Some functions available to scripts shouldn't be considered 'actions'. For example: I like to play Wizardly types, and I love having incantations accompany my spells. It is much more RP to have my 'toon shout 'Ignam belicosus, fiat LUX!' when casting a fireball than it is to just cast a regular old fireball. Attaching a /say command to a /CastSpell("Fireball", 3) IS scripting, and is the type of scripting that should be encouraged. Again, you're not 'botting if you have to keep pressing keys.
3. Initiation. Scripts should ONLY be initiated by a hardware event. This will stop the 'response' type script, which is NOT RP. /away is enough for that, someone sending you a tell get's your /away message and you get a cute little /away flag on your 'toon so people don't think you're ignoring them - in some things, convienence SHOULD take precedence over immersion. Again, you can't bot if you can't respond automatically to game input.
We've covered what scripts should not be able to do. The next things give a vision of what they SHOULD be able to do:
1. Player and Mob Scope. Scripts SHOULD be able to take into account the status of a player and that player's party and any actively engaged mobs. An /assist script is a great example of this. Bind a key or slot to /assist PlayerName. You're making life EASIER for people with this script, because in a big fight, it can often be confusing as to which mob to attack. Another good example is /target PlayerLowestHealth() followed by /CastSpell("Minor Heal", 2). This is a Role-playing
game and in real life there are many more stimuli available to people than within the confines of the game system. Allowing someone to heal the person with the lowest health or keep one person /assist-ed is NOT a violation of a strict RP environment because the game mechanics are limited to what visual and audio details have been implemented.
2. GUI Scope. Players are individuals and game designers are not omnipotent (so don't believe them when they say they are!

). Allowing scripts to manipulate the way the PLAYER interacts with her environment is a GOOD thing. New artwork, extra buttons, better/more informative displays, &ct. All of these things and more fall into the realm of scripting. GUI changes are not violations of RP because they don't affect other players or the way the game is played. In fact, they encourage RP. A player who wants to play a dark, brooding, evil character can manipulate her GUI to reflect that by adding skulls and slime and shadowy figures to the artwork in and around her action buttons. A player who wants to be the best, most efficient healer in the game, can manipulate her GUI for enhanced flexibility and efficency by moving healing buttons to where she can most easily reach them and place her simple, spare information displays directly in her line of sight.
Let's take a concrete example of this, using our Healer as an example.
Our healer, let's call her Grace, wishes to be as effective a healer as she can. So, she creates - or downloads from someone else's creation - a GUI script that creates extra buttons joined to each party member's information display. She doesn't go crazy with this, she just wants a few buttons on each one. Then, she makes some simple scripts for each of her new buttons. They look something like this:
/Target PartyPosition(1)
/say "Don't worry " + PartyPosition(1) + ", you've got a heal incoming!"
/CastSpell ("Minor Heal", 2) //Comment: Minor Heal, rank 2.
/TargetLastEnemy()She does this for PartyPosition(2) and PartyPosition(3) &ct. Is this an RP violation? Of course not! All it does is simplify a rather repetive task that, in the real world would be a lot easier. Grace WANTS to heal her party, but the interface can make that clunky sometimes. By allowing Grace to attach buttons - and actions - to her party members, she simplifies the act of targetting the person she wants to heal, healing them and going back to the target she wants to destroy. All of these things would be automatic in a 'real' world where these things are possible, but the interface will get in the way of that.
Continuing our example, let's say Grace has discovered a need for a 'Panic' button. She puts a simple script in her main bar that looks something like this:
/TargetPlayerLowestHealth()
/CastSpell("Mega Heal", 5)
/say "The " + Assist() + " is attacking " + TargetPlayerLowestHealth() + " pull it off of them before they die!"
/TargetPlayerLowestHealth() Again, in a 'real' world where this action was going on, all of these things would be automatic. Scripts like these INCREASE versimilitude by allowing the player to designate oft repeated actions to a script that does exactly what they intend to do, but allows the interface to be shoved out of the way. All of these things would be possible in a real world environment, but the interface prevents that. People don't type as fast as they talk, and one can talk and DO something at the same time, can they not?
Anyhoo, taking a middle ground between no scripting and out and out 'botting is the best way to go in my opinion. People LOVE to customize. Look at the Hot Rod craze of the 50's and 60's, look at all the custom do-dads and gee-gaws available for customizing one's computer today... As long as reasonable precautions are taken to prevent 'botting, scripting can, and should be encouraged.