All weapons must include the following lines:
   inherit DAGGER;
    void setup() {
    }
    The line    inherit DAGGER;
    is the base for your weapon. It gives you the ability to set descriptions, 
    bonuses, etc. You can inherit a number of weapon inherits, 
    the list can be found in /std/inherits/weapons/
    
         Examples are:
            inherit DAGGER;
            inherit WHIP;
            inherit SHORT_SWORD;
            inherit STAFF;
    Your weapon must contain at least one inherit.
    Pick the one most appropriate for your weapon if there is not an
    exact match.
    Most, if not all, of your weapon's code will go inside the {}s
    of the setup() function.
    Make your code as clean as possible. Indent! (The 'I' command
    within ed does indentation).
    The most basic weapon file is like this:
     inherit LONG_SWORD;
     void setup() {
         set_id( "broadsword", "sword" );
         set_adj( "mighty" );
         set_in_room_desc( "A mighty broadsword" );
         set_long( "The sword is made of black iron.\n");
         set_size(30);
         set_mass(22);
         set_quality(5);
         set_magic_level(0);
}
     set_id()
     USAGE: set_id(primary id, secondary id,...)
     This is what the players use to identify the weapon.
     It should be in all lower case. The set_id() should be the
     most logical name for the weapon, any noun used in the desc
     of the item should most likely be included as an id. Notice 
     you can pass multiple ids to set_id(). The first one passed 
     will be considered the "primary id" and will be joined with 
     the 'primary adj' to form the primary name of the item.
     set_id("broadsword","sword");
    set_adj()
    English 101 - Adjectives are any word that describes a noun. Ugly
    dog, fat dog, young dog, pretty dog, innocent dog, lustful dog,
    crazy dog, etc. are all examples of an adjective and its noun
    (in this case, "dog").
    As with set_id(), set_adj() can take a list of adjectives. 
    Again, the first one specified is the 'primary' adjective. This
    gets combined with the primary id to form the 'primary name'.
    If your weapon has an adjective in its description, you
    should include adjective in set_adj() for it. This
    allows a player to type "wield mighty broadsword" and have
    the mud know what they are referring to.
    set_adj("mighty");
    set_in_room_desc()
    USAGE: set_in_room_desc(string)
    This gives a description to the weapon if it is found in a 
    room.
    see also: set_untouched_desc()
    set_in_room_desc("A mighty sword lies here collecting dirt.");
   
    set_long
   
    USAGE: set_long(long desc)
    When a player looks at the weapon, this is what he will see
    This helps the player to visualize the weapon, so don't be
    skimpy on the description (like this example is)!
    set_long( "The sword is made of black iron.\n" );
  
   set_size()
    USAGE: set_size(number)
    This defines the size of the weapon in inches. This particular
    weapon is 2 feet and 6 inches long (12 inches per foot).
    Setting this parameter is NOT mandatory, if you do not set it
    yourself it will use the default value linked to the inherit
    you used (so if you used DAGGER it'll be fairly small, if you
    used LONG_SWORD like here, it'll be quite long). Size of a 
    weapon affects its weapon class since big weapons hit harder.
    set_size(30);
  
    set_mass()
    This defines the weight of the weapon, expressed in pounds. 
    This has an important effect on the weapon class of the item.
    As with size, you do not have to set this parameter if you 
    want it to be just the default weight for the inherit. 
    set_mass(22)
    set_quality()
    This defines the quality of the making/forging of the weapon.
    It goes from 0 to 10 (if you use smaller values it will be 0,
    and bigger ones will be dealt as 10). This also affects the
    weapon damage in melee. The default quality of a weapon is 4
    which is considered average. 
    set_quality(5)
    set_magic_level()
    This represents whether the weapon was enchanted to be more
    efficient in battle. The parameter ranges from 0 (default
    value) to 10. A weapon with a 10 magic level should be a very
    powerful one and restricted to equipment obtained from tough
    monsters. 
    If the weapon is to be wielded by a monster, you have to be
    careful to check if the monster can wield it or not. Monsters
    of low levels have limits to which weapons they can wield. Big
    ones can wield about anything.
Well, right now the weapon is functional, but pretty basic. The 
following functions can be used to spice it up a bit.
    set_light
    
    USAGE: set_light
    This function makes it so that the weapon actually emits light,
    light that will effect everyone in the room. Positive numbers
    give light while negative numbers make the object absorb
    light.
   
    add_stat_bonus
    USAGE: add_stat_bonus(stat,amount)
    This function allows to give bonuses to the weapon. See current
    guidelines (help eqstats) to check limits of such bonuses. Valid additions to
    this function are usual statistics (str, con, dex, int, wis, sta),
    regeneration(sp_regen, hp_regen, ep_regen) and special stats
    like all_skills, all_spells, damage, avoid_hits.
 
    add_resist_bonus()
    USAGE: add_resist_bonus(resistance,percent)     
    Adds a magical bonus to a resistance to the weapon. First argument
    has to be a valid damage type. Second argument is the value of the
    resistance.
    add_resist_bonus("physical", 2);
  
    set_wield_message()
   
    USAGE: set_wield_msg(string)
    Defines a special message that is displayed to the player when he
    wields the weapon. Message can be based off the messages module.
    set_wield_msg("$N $vfeel a surge of power as $n $vwield the famous "
	          "sword of power.\n");
    
    set_unwield_msg()
  
    USAGE: set_unwield_msg(string)
    Defines a special message that is displayed to the player when he
    unwields the weapon. Message can be based off the messages module.
    set_unwield_msg("$N $vfeel weak as $n $vunwield the sword.\n");
    set_magical_damage_type()
    USAGE: set_magical_damage_type(string | mapping )
        
       This functions allow the weapon to do damage types other than physical
       in melee (physical is the default damage). 
       There are two options, the first one is to set a string (which was 
       the original way for it to work) and in that case the weapon will do 
       half physical damage and half fire damage (in our example, you can use 
       any allowed damage type).
             set_magical_damage_type("fire");
       The two other examples use a mapping as the argument to the function, and
       in that case the mapping must be a list of valid damage types which 
       are affected values that represent percentages. The sum of the values
       must therefore never go over 100. If the sum is inferior to 100, the
       remaining damage is attributed to physical damage type. So in the two
       examples given, first one the weapon will do 75% fire and 25% physical,
       while in the second the weapon will do 10% magical, 10% acid and 80%
       physical.  
             set_magical_damage_type( ([ "fire" : 75 ]) );
             set_magical_damage_type( ([ "magical" : 10, "acid": 10 ]) );
With some weapons, you are going to want to add special abilities that are not included in the standard weapon code. The most common is to give a weapon a special hit. The following example does not cover all of the possibilities, by any means. If you can imagine it, odds are it can be done.The following code should be located outside the void setup() {}
void special_attack(object target) { object attacker = this_object()->query_wielded_by(); if (random(4)) return; attacker->combat_targetted_action( "$P mighty broadsword slips past $p1 defenses and strikes "+ "home!\n", target); target->hit_me(random(150), "physical", attacker); }
This function is called once per round. Since random(4) is true 75% of the time (true meaning non zero here), it means the attack will occur one round out of 4. Combat_targetted_action is a special messenging function that takes into account the flag for combat silent. If you don't understand any part of this code, please feel free to ask another wizard to clarify.