A dump of #2521 (hand-and-a-half weapon)

@create #82 named generic hand-and-a-half weapon:generic hand-and-a-half weapon,half,hand,weapon
"#2521.("dodgable") => E_PERM (Permission denied)
"#2521.("parryable") => E_PERM (Permission denied)
"#2521.("slowness") => E_PERM (Permission denied)
"#2521.("parry") => E_PERM (Permission denied)
"#2521.("attack") => E_PERM (Permission denied)
"#2521.("pen") => E_PERM (Permission denied)
"#2521.("dam") => E_PERM (Permission denied)
"#2521.("skill") => E_PERM (Permission denied)
;;#2521.("pierce") = 0
"#2521.("max_str_bonus") => E_PERM (Permission denied)
"#2521.("can_degrade") => E_PERM (Permission denied)
"#2521.("track_usage") => E_PERM (Permission denied)
;;#2521.("worth") = -1
;;#2521.("condition") = 100
;;#2521.("odrop_failed_msg") = "%<tries> to drop %t but fails!"
;;#2521.("odrop_succeeded_msg") = "%<drops> %t."
;;#2521.("otake_succeeded_msg") = "%<picks> up %t."
"#2521.("key") => E_PERM (Permission denied)
;;#2521.("aliases") = {"generic hand-and-a-half weapon", "half", "hand", "weapon"}
;;#2521.("description") = "A generic implement of destruction."
;;#2521.("object_size") = {4534, 1141286558}

@verb #2521:"wield weild" any any any rxd
@program #2521:wield
if (!$local.rpg:trust($nothing, player))
  return E_PERM;
elseif (this.location != player)
  player:tell("You don't have ", this.name, ".");
  return;
elseif (!valid(doll = $local.rpg:get_doll(player)))
  player:tell("It wouldn't do you much good, you don't know how to use it.  Check out the Bovine Illuminati for some instruction.");
elseif (p = doll.paralyzed)
  return player:tell((typeof(p) == STR) ? p | "You're paralyzed.  Wielding this weapon would be out of the question.");
elseif (!this:may_wield(player))
  return;
endif
if (iobjstr == "")
  first = "two";
else
  first = $string_utils:explode(iobjstr)[1];
endif
if (first in {"one", "1"})
  this:one();
  handstr = "one-handed";
else
  this:two();
  handstr = "two-handed";
endif
wielding = doll.wielding = setremove(doll.wielding, this);
this:do_unwield(player);
if ((handsreq = this.hands) > doll.hands)
  player:tell("You don't have enough appendages to wield ", this.name, ".");
  return;
elseif ((handsfree = doll:hands_free()) < handsreq)
  player:tell("Your hands are full.");
  while (wielding && (handsfree < handsreq))
    thing = wielding[1];
    if (thing:may_unwield(player))
      thing:do_unwield(player);
      player:tell("You ", thing.sheathe, " your ", thing.name, ".");
      handsfree = handsfree + thing.hands;
    endif
    wielding = listdelete(wielding, 1);
  endwhile
endif
if (handsfree >= handsreq)
  doll.wielding = setadd(wielding, this);
  this:do_wield(player);
  player:tell("You ", this.wield, " your ", this.name, " ", handstr, ".");
  player.location:announce($string_utils:pronoun_sub(((("%n %<" + this.owield) + "> %p %t ") + handstr) + "."));
endif
"Profane 27-MAY-96 1734EST -- s/2/doll.hands/25";
"Irin Sat Sep 28 12:45:54 1996 PDT -- Major rewrite.  Updated to look more like #82:wield.";
.

@verb #2521:"one two" none none none rxd
@program #2521:one
"Set the mode of the weapon; one hand or two.";
if (!$local.rpg:trusted(caller_perms()))
  return E_PERM;
endif
this.hands = verb in {"one", "two"};
this.skill = this.(tostr("skill", this.hands));
return this.hands;
"Ogwul:Sun Apr 10 20:31:05 MDT 1994:Modified to set this.skill to either this.skill1 or this.skill2 as necessary.";
.

@verb #2521:"dodgable parryable slowness length parry attack pen dam skill" this none this rx
@program #2521:dodgable
"Stats are dependant on how the weapon is wielded.";
"If a property matching the verb (with the value of this.hands appended) is found, set the stat to that value, restoring it after passing args.";
if ((temp = this.(tostr(verb, this.hands))) != E_PROPNF)
  old = this.(verb);
  this.(verb) = temp;
  value = pass(@args);
  if (old == parent(this).(verb))
    clear_property(this, verb);
  else
    this.(verb) = old;
  endif
  return value;
else
  return pass(@args);
endif
.

"***finished***