wMUD TODO file ============== This file is continuously migrated into the Zim wiki (later it will become media or dokuwiki). Data storage and code flow -------------------------- * Store EVERYTHING in an SQLite3 database * At least two threads. One of them should continuously write everything back to the database, while the other one should serve the connections. Maybe the out-of-game chat should be outsourced to a separate thread, either. * All descriptions should be written in a markup language to support bold, underline, colours, and such Game world ---------- * Movement - 10 directions (N, E, S, W, NE, NW, SE, SW, U, D) - Also, some rooms may have other exits, like portals, which can be ENTER'ed. - Doors can be locked or hidden * Planets/Planes - Rooms are connected to Planets - Planets are connected to Planes - Rooms may have different descriptions depending on the Plane the Character is active on * Player grouping (AKA Party) * People start in a well-defined start location (randomly selected during character generation) - All Races have at least one possible start locations - The whole world should have one fallback start location (Tree of Memories?) * Housing system should automatically expand towns (this will be fun to write). Maybe a better alternative is to check for free housing and if the amount goes too low, manually create some new one. - Housing should be decorated with different objects. - Houses get untidy over time, so they need to be cleaned - House maids * Inn and Tavern system - Characters can set their hometown in an Inn; however, Inns have only a limited amount of rooms. Inn rooms cost some amount of gold per day, which is pre-paid. If the rent is over, the character's start location is set to one of the racial defaults. If the character is online when the rent is over, they should get a warning message about this. If the player gets an own house, their home location should be automatically set to it - Tavern system . Tables and chairs . Tables are private chat rooms with a maximum number of members . Each tavern has a fixed amount of tables and chairs . Chairs can be moved from one table to another . Tables have a maximum number of chairs (which may vary depending on the table's size) * Item disposal methods - Drop Dropped items don't generate points, nor money. They also get the dropped flag, so they loose some (most) of their property bonuses unless their original owner picks them up - Donation Donated items automatically appear in the nearest donation room (or random, maybe). Donations are recorded, and the characters who donate in larger amounts and/or more valuable items may get rewards - Sacrifice Sacrificed items become energy, which the Gods retun as Sacrifice Points. - Salvage Most items can be salvaged to get some raw materials back - Auction Items can be auctioned at the Market Squares * Item creation (AKA combining or Professions) - Trainers, who know only specific recipes - Recipe scrolls (e.g to be dropped by mobs and such) - Corpse skinning (only specific corpses) - Corpse butching (only specific corpses) - Fishing - Mining - Foraging - Blacksmithing - Alchemy * Companions - Combat/Pack animals - Mounts (may also act as combat/pack animals) - Charming - Servants, pages * Gods - Gods may be chosen upon character creation (for wMUD, a character MUST have at least two Gods) - Sacrifices - Prayers * Reputation system * Player Clans o Clan bank o Clan wars (Players from a Guild may PK players from another Guild if the two Guilds are in war with each other) * Item types - Armour/Clothing . Shields - Weapon . Ballista . Bashing . Bow . Crossbow . Club . Knuckle . Lash . Net . Piercing . Slashing . Whip - Potion - Poison (appliable to weapons) - Food/Water/Alcohol/Sugar - Light . Maybe these objects (or some of them) should be seen in the dark - Spell reagent - Material - Artifacts - Containers . Bags * Death system, Rebirth * War Machines * Shops - Most shops should open/close depending on the in-game time * Skills/Spells/Talents granted by the Gods - Fear * Magic Profession * Fighting Professions with practicing - Disarm - Dual Wield - Stun * The whole system should be built with class support, although wMUD will technically have only one "Adventurer" class. Also, multiclassing should be possible * Character aging, with racial maximum age. When a character is too old, they can retire (e.g they will become story tellers or such), or die and rebirth. Reborn characters have a bonus to their maximum age. Upon rebirth they create a totally new character, with all their old data remaining in the database. Reborn characters have the possibility to regain all their old powers after a few years * Quests o Quests given by NPCs o Player creatable quests o Character bounty, which can be placed by other characters for a fee (should be enabled per world), or NPCs. * In-game chat (whisper, say, shout, emotes, group/party, guild). Guild chat should be accessible without entering the game (from the Circle-like main menu), or even via IRC or something like that * Speedwalking? * Arenas * Mercy mob flag: mobs will stop attacking if their enemy is unable to fight any more * Mobs should be able to wear/wield items, have an inventory, have Skills, Spells and Talents * Sneaking, thieving, robbery - A mob may steal stuff from you, you may detect it, and maybe able to catch it and get your stuff back. However, killing them in a city may result in punishment by the guards. - Player killing/thieving should be enabled/disabled per world * Gossips - Bragging NPCs: if a character gets killed by a specific NPCs, those NPCs will humiliate that character for a while * Weapon USE: wielded weapons may do something (like cast spells or such) if a specific attribute is set. The item spell should recharge over time, or recharge upon a specific condition * Money (with the possibility to create several money types, like different currencies for different Races or Countries) * Banks - Money deposit (with interest in some banks) - Storage, for a fee - Loans * All looted items should be used in some way or another. Sacrifice is a common way, but some items may be milled (e.g bones and herbs) or disassembled (e.g Mechanics objects or armour), others may be used as raw materials. Extracted body parts (e.g blood or meat) should decompose over time, even in an inventory, unless put in a special container * Object affects and attribute modifiers, like an earring which make the character deaf. These affects may be hidden, and even delayed (e.g the character puts on the earring that gives a high amount of charisma, but after wearing it for a specific time, they will become deaf, and they will have no idea what caused it. The same object can also be cursed, so it cannot be removed except by some professional magicians * Item modifiers, like sharpening stones * Item durability. Items must have a Profession and a Profession Level associated to them to show who can repair it * arrives from * Mob glowing (e.g they will be unable to sneak) * Polls * Configurable prompt * Marriage? * Character titles, which can be rewards for quests, or be bought for a high amount of money * Spirit world - Some rooms (at least one) should be marked as Spirit World. Upon death, characters get the DEAD flag, and get to this room. They must find their way to remove the DEAD flag, and/or find a way back to the real world. * Blood may remain on the floor during a fight (even without a kill) * Special rooms o Death trap rooms o Regeneration rooms o Teleportation objects (portal machines) and rooms (elevators) * Languages * Books * Rivers should have some kind of a current. If you get into a river (even on a boat, or by swimming), it will move you automatically somewhere * Gambling (may be illegal in some towns ;) ) * Guides that can be payed for. E.g in a big city, a guide can lead you to the Inn, or something like that for a small fee. * Automatically hiding/appearing exits (e.g to create mazes or to hide stuff) * Mailing * Abilities - Rolled upon character creation - May be trained (ability training may be enabled/disabled system wide) - There should be a racial maximum - May be modified by affections and worn items - May increase/decrease with age * Tattoes, scars, piercings, etc. Commands -------- * Commands already defined in Zim Wiki: - DROP - GET - PRACISE/PRACTICE - PRAY - RECALL should take back the character to their house, or the Inn room they have rented. Specific rooms may have a flag so there must be no recall from them (this should also mean that upon logout/login, the character will get back to this room) - SURVEY - TALE * Commands that should be present - AFFECTS to show all the spells that affects the character (spell name, apply count, duration, applier name) - SCORE to show the player's statistics - INVENTORY to show the character's inventory - EQUIPMENT to show the equipped items - AUTOEXIT to toggle exit display on LOOK - LOOK - EXITS - EXAMINE should be an alias to LOOK, except it should work only on objects - CONSIDER - SET . AUTOLOOT [OFF] . AUTOSKIN [OFF] . AUTODRAIN [OFF] . AUTOSPLIT [OFF] . COLOR [ON ] . AUTOLOOK [ON ] . WIMPY [OFF] . AUTOCONSUME [OFF] (To automatically consume food and drink when hungry/thirsty) . GROUPINV [ON ] . PAGELENGTH [30 ] - BURY/DIG - EQUIP/WIELD - IGNORE/UNIGNORE - WHO/WHOIS - QUIT should exit the game - LOGOUT should go back to intro menu - USE may use objects in hand (map, weapons with spells, etc.), or in room (buttons, levers, etc.) Materia Magica command list --------------------------- $ = gold . = shout / = chat ; = formtalk ? = help away affects affected auction align alias alliance bury build backstab bash breathe bank cast channels combat ctf clear cls commands consider chat clan clantalk ct close charge chess changes credits class challenge description donate dream dig drink drop disarm dismount effects evoke equipment examine enter extinguish emote eat empty equip fill feed flee friends faction formation ft feign get gold give grab grapple guide gohome hitch help hold herald hint hide history home inventory invoke ignore kill kick knock look light levels lock locker lay mix memorize mail marks mount news novice notify order open practice pktalk pray pick put pull push play protocols page quest quit rest read report rules relay reply remove run recall rewardunit religion raise snare sit stand sweep score socials skills scan survey say sayto shop shout search sacrifice set sleep sneak ship steal shift slit strike tell tag time termreset typo title turn take throw track train unhitch use unequip unlock vendor visible version wield who whisper weather wimpy wear write wake where yell CircleMUD commands ------------------ { "north" , POS_STANDING, do_move , 0, SCMD_NORTH }, { "east" , POS_STANDING, do_move , 0, SCMD_EAST }, { "south" , POS_STANDING, do_move , 0, SCMD_SOUTH }, { "west" , POS_STANDING, do_move , 0, SCMD_WEST }, { "up" , POS_STANDING, do_move , 0, SCMD_UP }, { "down" , POS_STANDING, do_move , 0, SCMD_DOWN }, { "at" , POS_DEAD , do_at , LVL_IMMORT, 0 }, { "advance" , POS_DEAD , do_advance , LVL_IMPL, 0 }, { "alias" , POS_DEAD , do_alias , 0, 0 }, { "accuse" , POS_SITTING , do_action , 0, 0 }, { "applaud" , POS_RESTING , do_action , 0, 0 }, { "assist" , POS_FIGHTING, do_assist , 1, 0 }, { "ask" , POS_RESTING , do_spec_comm, 0, SCMD_ASK }, { "auction" , POS_SLEEPING, do_gen_comm , 0, SCMD_AUCTION }, { "autoexit" , POS_DEAD , do_gen_tog , 0, SCMD_AUTOEXIT }, { "autoloot" , POS_DEAD , do_gen_tog , 0, SCMD_AUTOLOOT }, { "autodrain", POS_DEAD , do_gen_tog , 0, SCMD_AUTODRAIN }, { "bounce" , POS_STANDING, do_action , 0, 0 }, { "backstab" , POS_STANDING, do_backstab , 1, 0 }, { "ban" , POS_DEAD , do_ban , LVL_GRGOD, 0 }, { "balance" , POS_STANDING, do_not_here , 1, 0 }, { "bash" , POS_FIGHTING, do_bash , 1, 0 }, { "beg" , POS_RESTING , do_action , 0, 0 }, { "bleed" , POS_RESTING , do_action , 0, 0 }, { "blush" , POS_RESTING , do_action , 0, 0 }, { "bow" , POS_STANDING, do_action , 0, 0 }, { "brb" , POS_RESTING , do_action , 0, 0 }, { "brief" , POS_DEAD , do_gen_tog , 0, SCMD_BRIEF }, { "burp" , POS_RESTING , do_action , 0, 0 }, { "bury" , POS_STANDING, do_bury , 0, 0 }, { "buy" , POS_STANDING, do_not_here , 0, 0 }, { "bug" , POS_DEAD , do_gen_write, 0, SCMD_BUG }, { "cast" , POS_SITTING , do_cast , 1, 0 }, { "cackle" , POS_RESTING , do_action , 0, 0 }, { "check" , POS_STANDING, do_not_here , 1, 0 }, { "chuckle" , POS_RESTING , do_action , 0, 0 }, { "clap" , POS_RESTING , do_action , 0, 0 }, { "clear" , POS_DEAD , do_gen_ps , 0, SCMD_CLEAR }, { "close" , POS_SITTING , do_gen_door , 0, SCMD_CLOSE }, { "cls" , POS_DEAD , do_gen_ps , 0, SCMD_CLEAR }, { "consider" , POS_RESTING , do_consider , 0, 0 }, { "color" , POS_DEAD , do_color , 0, 0 }, { "comfort" , POS_RESTING , do_action , 0, 0 }, { "comb" , POS_RESTING , do_action , 0, 0 }, { "commands" , POS_DEAD , do_commands , 0, SCMD_COMMANDS }, { "compact" , POS_DEAD , do_gen_tog , 0, SCMD_COMPACT }, { "cough" , POS_RESTING , do_action , 0, 0 }, { "credits" , POS_DEAD , do_gen_ps , 0, SCMD_CREDITS }, { "cringe" , POS_RESTING , do_action , 0, 0 }, { "cry" , POS_RESTING , do_action , 0, 0 }, { "cuddle" , POS_RESTING , do_action , 0, 0 }, { "curse" , POS_RESTING , do_action , 0, 0 }, { "curtsey" , POS_STANDING, do_action , 0, 0 }, { "dance" , POS_STANDING, do_action , 0, 0 }, { "date" , POS_DEAD , do_date , LVL_IMMORT, SCMD_DATE }, { "daydream" , POS_SLEEPING, do_action , 0, 0 }, { "dc" , POS_DEAD , do_dc , LVL_GOD, 0 }, { "deposit" , POS_STANDING, do_not_here , 1, 0 }, { "diagnose" , POS_RESTING , do_diagnose , 0, 0 }, { "dig" , POS_STANDING, do_dig , 0, 0 }, { "display" , POS_DEAD , do_display , 0, 0 }, { "donate" , POS_RESTING , do_drop , 0, SCMD_DONATE }, { "drain" , POS_STANDING, do_drain , 0, 0 }, { "drink" , POS_RESTING , do_drink , 0, SCMD_DRINK }, { "drop" , POS_RESTING , do_drop , 0, SCMD_DROP }, { "drool" , POS_RESTING , do_action , 0, 0 }, { "eat" , POS_RESTING , do_eat , 0, SCMD_EAT }, { "echo" , POS_SLEEPING, do_echo , LVL_IMMORT, SCMD_ECHO }, { "emote" , POS_RESTING , do_echo , 1, SCMD_EMOTE }, { ":" , POS_RESTING, do_echo , 1, SCMD_EMOTE }, { "embrace" , POS_STANDING, do_action , 0, 0 }, { "enter" , POS_STANDING, do_enter , 0, 0 }, { "equipment", POS_SLEEPING, do_equipment, 0, 0 }, { "exits" , POS_RESTING , do_exits , 0, 0 }, { "examine" , POS_SITTING , do_examine , 0, 0 }, { "force" , POS_SLEEPING, do_force , LVL_GOD, 0 }, { "fart" , POS_RESTING , do_action , 0, 0 }, { "fill" , POS_STANDING, do_pour , 0, SCMD_FILL }, { "flee" , POS_FIGHTING, do_flee , 1, 0 }, { "flip" , POS_STANDING, do_action , 0, 0 }, { "flirt" , POS_RESTING , do_action , 0, 0 }, { "follow" , POS_RESTING , do_follow , 0, 0 }, { "fondle" , POS_RESTING , do_action , 0, 0 }, { "freeze" , POS_DEAD , do_wizutil , LVL_FREEZE, SCMD_FREEZE }, { "french" , POS_RESTING , do_action , 0, 0 }, { "frown" , POS_RESTING , do_action , 0, 0 }, { "fume" , POS_RESTING , do_action , 0, 0 }, { "get" , POS_RESTING , do_get , 0, 0 }, { "gasp" , POS_RESTING , do_action , 0, 0 }, { "gecho" , POS_DEAD , do_gecho , LVL_GOD, 0 }, { "give" , POS_RESTING , do_give , 0, 0 }, { "giggle" , POS_RESTING , do_action , 0, 0 }, { "glare" , POS_RESTING , do_action , 0, 0 }, { "goto" , POS_SLEEPING, do_goto , LVL_IMMORT, 0 }, { "gold" , POS_RESTING , do_gold , 0, 0 }, { "gossip" , POS_SLEEPING, do_gen_comm , 0, SCMD_GOSSIP }, { "group" , POS_RESTING , do_group , 1, 0 }, { "grab" , POS_RESTING , do_grab , 0, 0 }, { "grats" , POS_SLEEPING, do_gen_comm , 0, SCMD_GRATZ }, { "greet" , POS_RESTING , do_action , 0, 0 }, { "grin" , POS_RESTING , do_action , 0, 0 }, { "groan" , POS_RESTING , do_action , 0, 0 }, { "grope" , POS_RESTING , do_action , 0, 0 }, { "grovel" , POS_RESTING , do_action , 0, 0 }, { "growl" , POS_RESTING , do_action , 0, 0 }, { "gsay" , POS_SLEEPING, do_gsay , 0, 0 }, { "gtell" , POS_SLEEPING, do_gsay , 0, 0 }, { "help" , POS_DEAD , do_help , 0, 0 }, { "handbook" , POS_DEAD , do_gen_ps , LVL_IMMORT, SCMD_HANDBOOK }, { "hcontrol" , POS_DEAD , do_hcontrol , LVL_GRGOD, 0 }, { "hiccup" , POS_RESTING , do_action , 0, 0 }, { "hide" , POS_RESTING , do_hide , 1, 0 }, { "hit" , POS_FIGHTING, do_hit , 0, SCMD_HIT }, { "hold" , POS_RESTING , do_grab , 1, 0 }, { "holler" , POS_RESTING , do_gen_comm , 1, SCMD_HOLLER }, { "holylight", POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_HOLYLIGHT }, { "hop" , POS_RESTING , do_action , 0, 0 }, { "house" , POS_RESTING , do_house , 0, 0 }, { "hug" , POS_RESTING , do_action , 0, 0 }, { "inventory", POS_DEAD , do_inventory, 0, 0 }, { "idea" , POS_DEAD , do_gen_write, 0, SCMD_IDEA }, { "imotd" , POS_DEAD , do_gen_ps , LVL_IMMORT, SCMD_IMOTD }, { "immlist" , POS_DEAD , do_gen_ps , 0, SCMD_IMMLIST }, { "info" , POS_SLEEPING, do_gen_ps , 0, SCMD_INFO }, { "insult" , POS_RESTING , do_insult , 0, 0 }, { "invis" , POS_DEAD , do_invis , LVL_IMMORT, 0 }, { "junk" , POS_RESTING , do_drop , 0, SCMD_JUNK }, { "kill" , POS_FIGHTING, do_kill , 0, 0 }, { "kick" , POS_FIGHTING, do_kick , 1, 0 }, { "kiss" , POS_RESTING , do_action , 0, 0 }, { "look" , POS_RESTING , do_look , 0, SCMD_LOOK }, { "laugh" , POS_RESTING , do_action , 0, 0 }, { "last" , POS_DEAD , do_last , LVL_GOD, 0 }, { "leave" , POS_STANDING, do_leave , 0, 0 }, { "levels" , POS_DEAD , do_levels , 0, 0 }, { "list" , POS_STANDING, do_not_here , 0, 0 }, { "lick" , POS_RESTING , do_action , 0, 0 }, { "lock" , POS_SITTING , do_gen_door , 0, SCMD_LOCK }, { "load" , POS_DEAD , do_load , LVL_GOD, 0 }, { "love" , POS_RESTING , do_action , 0, 0 }, { "moan" , POS_RESTING , do_action , 0, 0 }, { "motd" , POS_DEAD , do_gen_ps , 0, SCMD_MOTD }, { "mail" , POS_STANDING, do_not_here , 1, 0 }, { "massage" , POS_RESTING , do_action , 0, 0 }, { "mute" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_SQUELCH }, { "murder" , POS_FIGHTING, do_hit , 0, SCMD_MURDER }, { "news" , POS_SLEEPING, do_gen_ps , 0, SCMD_NEWS }, { "nibble" , POS_RESTING , do_action , 0, 0 }, { "nod" , POS_RESTING , do_action , 0, 0 }, { "noauction", POS_DEAD , do_gen_tog , 0, SCMD_NOAUCTION }, { "nogossip" , POS_DEAD , do_gen_tog , 0, SCMD_NOGOSSIP }, { "nograts" , POS_DEAD , do_gen_tog , 0, SCMD_NOGRATZ }, { "nohassle" , POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_NOHASSLE }, { "norepeat" , POS_DEAD , do_gen_tog , 0, SCMD_NOREPEAT }, { "noshout" , POS_SLEEPING, do_gen_tog , 1, SCMD_DEAF }, { "nosummon" , POS_DEAD , do_gen_tog , 1, SCMD_NOSUMMON }, { "notell" , POS_DEAD , do_gen_tog , 1, SCMD_NOTELL }, { "notitle" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_NOTITLE }, { "nowiz" , POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_NOWIZ }, { "nudge" , POS_RESTING , do_action , 0, 0 }, { "nuzzle" , POS_RESTING , do_action , 0, 0 }, { "olc" , POS_DEAD , do_olc , LVL_IMPL, 0 }, { "order" , POS_RESTING , do_order , 1, 0 }, { "offer" , POS_STANDING, do_not_here , 1, 0 }, { "open" , POS_SITTING , do_gen_door , 0, SCMD_OPEN }, { "put" , POS_RESTING , do_put , 0, 0 }, { "pat" , POS_RESTING , do_action , 0, 0 }, { "page" , POS_DEAD , do_page , LVL_GOD, 0 }, { "pardon" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_PARDON }, { "peer" , POS_RESTING , do_action , 0, 0 }, { "pick" , POS_STANDING, do_gen_door , 1, SCMD_PICK }, { "point" , POS_RESTING , do_action , 0, 0 }, { "poke" , POS_RESTING , do_action , 0, 0 }, { "policy" , POS_DEAD , do_gen_ps , 0, SCMD_POLICIES }, { "ponder" , POS_RESTING , do_action , 0, 0 }, { "poofin" , POS_DEAD , do_poofset , LVL_IMMORT, SCMD_POOFIN }, { "poofout" , POS_DEAD , do_poofset , LVL_IMMORT, SCMD_POOFOUT }, { "pour" , POS_STANDING, do_pour , 0, SCMD_POUR }, { "pout" , POS_RESTING , do_action , 0, 0 }, { "prompt" , POS_DEAD , do_display , 0, 0 }, { "practice" , POS_RESTING , do_practice , 1, 0 }, { "pray" , POS_SITTING , do_action , 0, 0 }, { "puke" , POS_RESTING , do_action , 0, 0 }, { "punch" , POS_RESTING , do_action , 0, 0 }, { "purr" , POS_RESTING , do_action , 0, 0 }, { "purge" , POS_DEAD , do_purge , LVL_GOD, 0 }, { "quaff" , POS_RESTING , do_use , 0, SCMD_QUAFF }, { "qecho" , POS_DEAD , do_qcomm , LVL_IMMORT, SCMD_QECHO }, { "quest" , POS_DEAD , do_gen_tog , 0, SCMD_QUEST }, { "qui" , POS_DEAD , do_quit , 0, 0 }, { "quit" , POS_DEAD , do_quit , 0, SCMD_QUIT }, { "qsay" , POS_RESTING , do_qcomm , 0, SCMD_QSAY }, { "reply" , POS_SLEEPING, do_reply , 0, 0 }, { "rest" , POS_RESTING , do_rest , 0, 0 }, { "read" , POS_RESTING , do_look , 0, SCMD_READ }, { "reload" , POS_DEAD , do_reboot , LVL_IMPL, 0 }, { "recite" , POS_RESTING , do_use , 0, SCMD_RECITE }, { "receive" , POS_STANDING, do_not_here , 1, 0 }, { "remove" , POS_RESTING , do_remove , 0, 0 }, { "rent" , POS_STANDING, do_not_here , 1, 0 }, { "report" , POS_RESTING , do_report , 0, 0 }, { "reroll" , POS_DEAD , do_wizutil , LVL_GRGOD, SCMD_REROLL }, { "rescue" , POS_FIGHTING, do_rescue , 1, 0 }, { "restore" , POS_DEAD , do_restore , LVL_GOD, 0 }, { "return" , POS_DEAD , do_return , 0, 0 }, { "roll" , POS_RESTING , do_action , 0, 0 }, { "roomflags", POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_ROOMFLAGS }, { "ruffle" , POS_STANDING, do_action , 0, 0 }, { "say" , POS_RESTING , do_say , 0, 0 }, { "'" , POS_RESTING , do_say , 0, 0 }, { "save" , POS_SLEEPING, do_save , 0, 0 }, { "score" , POS_DEAD , do_score , 0, 0 }, { "scream" , POS_RESTING , do_action , 0, 0 }, { "sell" , POS_STANDING, do_not_here , 0, 0 }, { "send" , POS_SLEEPING, do_send , LVL_GOD, 0 }, { "set" , POS_DEAD , do_set , LVL_GOD, 0 }, { "shout" , POS_RESTING , do_gen_comm , 0, SCMD_SHOUT }, { "shake" , POS_RESTING , do_action , 0, 0 }, { "shiver" , POS_RESTING , do_action , 0, 0 }, { "show" , POS_DEAD , do_show , LVL_IMMORT, 0 }, { "shrug" , POS_RESTING , do_action , 0, 0 }, { "shutdow" , POS_DEAD , do_shutdown , LVL_IMPL, 0 }, { "shutdown" , POS_DEAD , do_shutdown , LVL_IMPL, SCMD_SHUTDOWN }, { "sigh" , POS_RESTING , do_action , 0, 0 }, { "sing" , POS_RESTING , do_action , 0, 0 }, { "sip" , POS_RESTING , do_drink , 0, SCMD_SIP }, { "sit" , POS_RESTING , do_sit , 0, 0 }, { "skillset" , POS_SLEEPING, do_skillset , LVL_GRGOD, 0 }, { "sleep" , POS_SLEEPING, do_sleep , 0, 0 }, { "slap" , POS_RESTING , do_action , 0, 0 }, { "slowns" , POS_DEAD , do_gen_tog , LVL_IMPL, SCMD_SLOWNS }, { "smile" , POS_RESTING , do_action , 0, 0 }, { "smirk" , POS_RESTING , do_action , 0, 0 }, { "snicker" , POS_RESTING , do_action , 0, 0 }, { "snap" , POS_RESTING , do_action , 0, 0 }, { "snarl" , POS_RESTING , do_action , 0, 0 }, { "sneeze" , POS_RESTING , do_action , 0, 0 }, { "sneak" , POS_STANDING, do_sneak , 1, 0 }, { "sniff" , POS_RESTING , do_action , 0, 0 }, { "snore" , POS_SLEEPING, do_action , 0, 0 }, { "snowball" , POS_STANDING, do_action , LVL_IMMORT, 0 }, { "snoop" , POS_DEAD , do_snoop , LVL_GOD, 0 }, { "snuggle" , POS_RESTING , do_action , 0, 0 }, { "socials" , POS_DEAD , do_commands , 0, SCMD_SOCIALS }, { "split" , POS_SITTING , do_split , 1, 0 }, { "spank" , POS_RESTING , do_action , 0, 0 }, { "spit" , POS_STANDING, do_action , 0, 0 }, { "squeeze" , POS_RESTING , do_action , 0, 0 }, { "stand" , POS_RESTING , do_stand , 0, 0 }, { "stare" , POS_RESTING , do_action , 0, 0 }, { "stat" , POS_DEAD , do_stat , LVL_IMMORT, 0 }, { "steal" , POS_STANDING, do_steal , 1, 0 }, { "steam" , POS_RESTING , do_action , 0, 0 }, { "stroke" , POS_RESTING , do_action , 0, 0 }, { "strut" , POS_STANDING, do_action , 0, 0 }, { "sulk" , POS_RESTING , do_action , 0, 0 }, { "switch" , POS_DEAD , do_switch , LVL_GRGOD, 0 }, { "syslog" , POS_DEAD , do_syslog , LVL_IMMORT, 0 }, { "tell" , POS_DEAD , do_tell , 0, 0 }, { "tackle" , POS_RESTING , do_action , 0, 0 }, { "take" , POS_RESTING , do_get , 0, 0 }, { "tango" , POS_STANDING, do_action , 0, 0 }, { "taunt" , POS_RESTING , do_action , 0, 0 }, { "taste" , POS_RESTING , do_eat , 0, SCMD_TASTE }, { "teleport" , POS_DEAD , do_teleport , LVL_GOD, 0 }, { "thank" , POS_RESTING , do_action , 0, 0 }, { "think" , POS_RESTING , do_action , 0, 0 }, { "thaw" , POS_DEAD , do_wizutil , LVL_FREEZE, SCMD_THAW }, { "title" , POS_DEAD , do_title , 0, 0 }, { "tickle" , POS_RESTING , do_action , 0, 0 }, { "time" , POS_DEAD , do_time , 0, 0 }, { "toggle" , POS_DEAD , do_toggle , 0, 0 }, { "track" , POS_STANDING, do_track , 0, 0 }, { "trackthru", POS_DEAD , do_gen_tog , LVL_IMPL, SCMD_TRACK }, { "transfer" , POS_SLEEPING, do_trans , LVL_GOD, 0 }, { "twiddle" , POS_RESTING , do_action , 0, 0 }, { "typo" , POS_DEAD , do_gen_write, 0, SCMD_TYPO }, { "unlock" , POS_SITTING , do_gen_door , 0, SCMD_UNLOCK }, { "ungroup" , POS_DEAD , do_ungroup , 0, 0 }, { "unban" , POS_DEAD , do_unban , LVL_GRGOD, 0 }, { "unaffect" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_UNAFFECT }, { "uptime" , POS_DEAD , do_date , LVL_IMMORT, SCMD_UPTIME }, { "use" , POS_SITTING , do_use , 1, SCMD_USE }, { "users" , POS_DEAD , do_users , LVL_IMMORT, 0 }, { "value" , POS_STANDING, do_not_here , 0, 0 }, { "version" , POS_DEAD , do_gen_ps , 0, SCMD_VERSION }, { "visible" , POS_RESTING , do_visible , 1, 0 }, { "vnum" , POS_DEAD , do_vnum , LVL_IMMORT, 0 }, { "vstat" , POS_DEAD , do_vstat , LVL_IMMORT, 0 }, { "wake" , POS_SLEEPING, do_wake , 0, 0 }, { "wave" , POS_RESTING , do_action , 0, 0 }, { "wear" , POS_RESTING , do_wear , 0, 0 }, { "weather" , POS_RESTING , do_weather , 0, 0 }, { "who" , POS_DEAD , do_who , 0, 0 }, { "whoami" , POS_DEAD , do_gen_ps , 0, SCMD_WHOAMI }, { "where" , POS_RESTING , do_where , 1, 0 }, { "whisper" , POS_RESTING , do_spec_comm, 0, SCMD_WHISPER }, { "whine" , POS_RESTING , do_action , 0, 0 }, { "whistle" , POS_RESTING , do_action , 0, 0 }, { "wield" , POS_RESTING , do_wield , 0, 0 }, { "wiggle" , POS_STANDING, do_action , 0, 0 }, { "wimpy" , POS_DEAD , do_wimpy , 0, 0 }, { "wink" , POS_RESTING , do_action , 0, 0 }, { "withdraw" , POS_STANDING, do_not_here , 1, 0 }, { "wiznet" , POS_DEAD , do_wiznet , LVL_IMMORT, 0 }, { ";" , POS_DEAD , do_wiznet , LVL_IMMORT, 0 }, { "wizhelp" , POS_SLEEPING, do_commands , LVL_IMMORT, SCMD_WIZHELP }, { "wizlist" , POS_DEAD , do_gen_ps , 0, SCMD_WIZLIST }, { "wizlock" , POS_DEAD , do_wizlock , LVL_IMPL, 0 }, { "worship" , POS_RESTING , do_action , 0, 0 }, { "write" , POS_STANDING, do_write , 1, 0 }, { "yawn" , POS_RESTING , do_action , 0, 0 }, { "yodel" , POS_RESTING , do_action , 0, 0 }, { "zreset" , POS_DEAD , do_zreset , LVL_GRGOD, 0 }, const char *fill[] = { "in", "from", "with", "the", "on", "at", "to", "\n" }; const char *reserved[] = { "a", "an", "self", "me", "all", "room", "someone", "something", "\n" };