There are many reasons for wanting to allow users to have constructive control over games. Look at most MUDs. They have a foundation of code and allow users to modify the game live. To me, it's a necessary component of online play. It can be done with Quest. I've had success doing it. You can clone objects, change their placement, modify their description, create rooms, etc. Here is an example of two commands I programmed into my game. A user with a high user control level can run them:
!*******************************************************************************************
! GODCOMMAND [GC] !objcreate object
!*******************************************************************************************
command <!objcreate #object#> {
if exists <#object#> then {
set numeric <true; 0>
repeat until (%true%=1) {
msg <|n[GC] Enter a new name for |b#object#|xb:>
enter <objectname>
if exists <#objectname#> then msg <[GC] Error: |b#objectname#|xb already exists.> else set numeric <true; 1>
}
clone <#object#; #objectname#>
give <#objectname#>
msg <[GC] Object |b#objectname#|xb has been created and placed into your inventory.>
}
else {
msg <|n[GC] Error: Object |b#object#|xb does not exist.>
}
}
!*******************************************************************************************
! GODCOMMAND [GC] !objsetprop object prop value
!*******************************************************************************************
command <!objsetprop #object#, #prop#, #value#> {
if exists <#object#> then {
if property <#object#; #prop#> then {
property <#object#; #prop#=#value#>
msg <|n[GC] Property |b#prop#|xb in object |b#object#|xb set.>
}
else {
msg <|n[GC] Warning: |b#object#|xb property '|b#prop#|xb' does not exist. Create it (Y/N)?>
enter <yesno>
if (#yesno#=Y) then {
property <#object#; #prop#=#value#>
msg <[GC] Property |b#prop#|xb in object |b#object#|xb set.>
}
else {
msg <[GC] Property not created.>
}
}
}
else {
msg <|n[GC] Error: |b#object#|xb does not exist.>
}
}