@create #18181 named DK's Misc RPG Utils:DK's Misc RPG Utils
"#54585.("usage") => E_PERM (Permission denied)
;;#54585.("notify_add") = 1
;;#54585.("notify_remove") = 1
;;#54585.("users") = {#78041, #91224, #97613, #92475, #102292, #59447, #88395, #80578, #87516, #94456, #98232, #98263, #103920, #85077, #93228, #94965, #90731, #96925, #87010, #91345, #104762, #89208, #101651, #91812, #57475, #92386, #81133, #105066, #58806, #56054, #103966, #106308, #101504, #90441, #104202, #106469, #106488, #63625, #100314, #105159, #58091, #38441, #103158, #100806, #90323, #108054, #71111, #103911, #85431, #60189, #108850, #103615, #107629, #103523, #99827, #106938, #109408, #108431, #108147, #109723, #109263, #108214, #110215, #86275, #105941, #107509, #110660, #63546, #107730, #71781, #97084, #89391, #108294, #69513, #99949, #2693, #77500, #84567, #112066, #110044, #110280, #66257, #88076, #62713, #110565, #91098, #112369, #112743, #107682, #112968, #38341, #112823, #110199, #72264, #113549, #113588, #98325, #59254, #113803, #113862, #106541, #113686, #113391, #109107, #81934, #113937, #87951, #113956, #113841, #89395, #88456, #106189, #106273, #103703, #114702, #113418, #114808, #114019, #112478, #103689, #110805, #105473, #115124, #114874, #98705, #114652, #91113, #114928, #115342, #115397, #112190, #107985, #97170, #114241, #115581, #107610, #109506, #107413, #100337, #110077, #107807, #87340, #64729, #115432, #80422, #106487, #114859, #116082, #116031, #116200, #112837, #116339, #116385, #37972, #64985, #87593, #116358, #57658, #116369, #107998, #91798, #115359, #107189, #110586, #116694, #116729, #116473, #113285, #114518, #89480, #115937, #115200, #115922, #114382, #117048, #117236, #117139, #117275, #117283, #112527, #109546, #117381, #112886, #117470, #116305, #117004, #112651, #117552, #116569, #117649, #109271, #43860, #98580, #116883, #117837, #114430, #100173, #97612, #63635, #106587, #118143, #117486, #50367, #114206, #92476, #118332, #110527, #90723, #115936, #106934, #116875, #101594, #118526, #118248, #108263, #114233, #35076, #117766, #118487, #118672, #118864, #118890, #107704, #118654, #117345, #118973, #112649, #102967, #118740, #118948, #117038, #114413, #59424, #96778, #119177, #118916, #86050, #116907, #103685, #118018, #119424, #118153, #119429, #115857, #109615, #119469, #116376, #112473, #86197, #119530, #115729, #96788, #110787, #115366, #116485, #112971, #118985, #115390, #87760, #119257, #119884, #19845, #111987, #119940, #86471, #107618, #119701, #119492, #114174, #118360, #115834, #112631, #119594, #120144, #120227, #102396, #118730, #118861, #120260, #120239, #97558, #119958, #120283, #119957, #119899, #117100, #120420, #118824, #120376, #119554, #120546, #109288, #105326, #120070, #120749, #119906, #105408, #57402, #120791, #111890, #114670, #121077, #120997, #121070, #121149, #114701, #121188, #121241, #102427, #121383, #121164, #121332, #114539, #121456, #113754, #121464, #116601, #121095, #120804, #121358, #121648, #121651, #87625, #118474, #121758, #121865, #109911, #121895, #106468, #121816, #121976, #121918, #121965, #121852, #115805, #118352, #122047, #121386, #114072, #121143, #120045, #122104, #122359, #119265, #122354, #122379, #106854, #122410, #110582, #122428, #122423, #122453, #122491, #100752, #121946, #122525, #122600, #122601, #50290, #122460, #110777, #122614, #122644}
;;#54585.("users_last_updated") = 1136238712
;;#54585.("help_msg") = {" These are various verbs that I had on my character, but decided", "that perhaps someone else might find them interesting as well...", "", "                           {Last edit : 11/16/97}"}
;;#54585.("feature_verbs") = {"waif", "bup", "storms", "slip", "dm", "bal", "lda"}
;;#54585.("guest_ok") = 1
"#54585.("key") => E_PERM (Permission denied)
;;#54585.("aliases") = {"DK's Misc RPG Utils"}
;;#54585.("description") = {" Various RPG verbs that I find useful."}
;;#54585.("object_size") = {16772, 1141286755}

@verb #54585:"slip" any none none rxd
@program #54585:slip
" SLIP   - Displays the last update / next update time of your parchment.";
"Also shows how many hours until your parchment expires.";
this:update_usage(verb, player);
player:tell("That information has been classified by the Bovine Illuminati.");
return;
if ((!dobjstr) || (!dobj))
  if ($command_utils:object_match_failed(slip = $string_utils:match("slip", $object_utils:all_contents(player), "aliases"), "slip"))
    return player:tell("You don't seem to have a slip, please purchase one from Cog.");
  endif
endif
sec = time() - slip.last_update_time;
expire = ((slip.decay_time - (time() - slip.init_time)) / 60) / 60;
player:tell("Last parchment update : ", sec / 60, " minutes ago.");
if (sec > slip.update_interval)
  player:tell("Reading your parchment will now update your stats.");
else
  player:tell("Next parchment update : ", 180 - (sec / 60), " minutes.");
endif
player:tell();
if ((time() - slip.init_time) < slip.decay_time)
  player:tell("Parchment will expire in ", expire, " hours.");
else
  player:tell("Your parchment has expired. Time to buy a new one...");
endif
.

@verb #54585:"bup" any none none rxd
@program #54585:bup
" BUP    -  Battle update. Fighting three monsters at a time and finding";
"yourself doing MS <monster> quite often? Well hey, let this handy verb";
" save you the hassle! Just type BUP and it will list your present";
"opponents and their health, along with your present health status.";
this:update_usage(verb, player);
agg_num = 0;
if ((aggressors = #27326:combatants(player)) != {})
  player:tell();
  (rpg = $local.rpg):look_health(player);
  for si in (aggressors)
    agg_num = agg_num + 1;
    player:tell();
    player:tell("Combatant #", agg_num, " : ", si.name);
    if ($object_utils:has_verb(si, "look_health"))
      si:look_health();
    else
      rpg:look_health(si);
    endif
  endfor
  player:tell("-- bup fini --");
else
  player:tell("You have no opponents at the present time.");
endif
.

@verb #54585:"storms" any any any rxd
@program #54585:storms
" STORMS - Lists all storms presently up system-wide. Displays the";
"casters name, location, and, numerically, the strength and maximum";
"number of strokes the storm is capable of.";
this:update_usage(verb, player);
player:tell();
player:tell("That information has been classified by the Bovine Illuminati.");
return;
if (this.mn[3].storms != {})
  player:tell_lines($string_utils:columnize({"Name", "Location", "Quality", "Strikes"}, 4));
  player:tell_lines($string_utils:columnize({"----", "--------", "-------", "-------"}, 4));
  for si in (this.mn[3].storms)
    loc = si[2].location;
    player:tell_lines($string_utils:columnize({si[2].name, loc.name, si[4], si[3]}, 4));
  endfor
  player:tell("- - -");
else
  player:tell("There are currently no storms active.");
endif
.

"#54585:4 --- Permission denied";
@verb #54585:"dm" none none none rxd
@program #54585:dm
" DM     - Dead monsters. Lists all monsters that are presently dead and";
"who killed them, if known. Also lists time in minutes until monster is";
"resurrected.";
this:update_usage(verb, player);
if (this.mn[4].contents != {})
  rq = #1140.resurrection_queue;
  player:tell_lines($string_utils:columnize({"Monster", "Killed by", "Resurrect Time"}, 3));
  player:tell_lines($string_utils:columnize({"-------", "---------", "--------------"}, 3));
  for si in (this.mn[4].contents)
    if (valid($local.rpg:get_doll(si)) && (!$object_utils:isa(si, #517)))
      if ($object_utils:isa(si, #56354) || $object_utils:isa(si, #8666))
        killer = "Unknown";
      elseif ($object_utils:has_property(si, "last_attacker"))
        attacker = si.last_attacker;
        killer = attacker.name;
      else
        killer = "Unknown";
      endif
      if ($list_utils:assoc(si, rq) == {})
        sec = "---";
      else
        rt = $list_utils:assoc(si, rq)[2];
        sec = (si.gestate - (time() - rt)) / 60;
      endif
      player:tell_lines($string_utils:columnize({si.name, killer, sec}, 3));
      $command_utils:suspend_if_needed(0);
    endif
  endfor
else
  player:tell("No monsters are dead monsters...");
endif
.

"#54585:6 --- Permission denied";
@verb #54585:"waif" any none any rxd
@program #54585:waif
" WAIF <item> - That battleaxe of yours just about to disintegrate";
"and you don't remember which monster you killed to get it? Have no";
"fear... Just type 'waif battleaxe' and you'll see. <item> is any";
"rpg item in your inventory - that includes armor, weapons, and special";
"items. You can specify the name of the object or the object number.";
this:update_usage(verb, player);
item = dobj;
if ($command_utils:object_match_failed(item, argstr))
  return;
endif
item_parent = parent(item);
item_tree = children(item_parent);
player:tell();
player:tell("Report of monsters carrying similar items: ");
player:tell();
player:tell_lines($string_utils:columnize({"Monster Name", "Monster Number", "Monster Location", "Location Number"}, 4));
player:tell_lines($string_utils:columnize({"------------", "--------------", "----------------", "---------------"}, 4));
for item_number in (item_tree)
  $command_utils:suspend_if_needed(5);
  if (((valid(item_number.location) && valid(item_number.location.location)) && #46:is_monster(item_number.location)) && (!$object_utils:isa(item_number, #8185)))
    item_holder = item_number.location;
    item_location = item_holder.location;
    player:tell_lines($string_utils:columnize({item_holder.name, item_holder, item_location.name, item_location}, 4));
  endif
endfor
player:tell("--waif finished--");
.

"#54585:8 --- Permission denied";
@verb #54585:"bup_old" any none none rxd
@program #54585:bup_old
" BUP    -  Battle update. Fighting three monsters at a time and finding";
"yourself doing MS <monster> quite often? Well hey, let this handy verb";
"save you the hassle! Just type BUP and it will list your present";
"opponents and their health, along with your present health status.";
this:update_usage(verb, player);
agg_num = 0;
if (this.mn[2]:combatants(player) != {})
  player:tell();
  this.mn[1]:look_health(player);
  for si in (this.mn[2]:combatants(player))
    agg_num = agg_num + 1;
    player:tell();
    player:tell("Combatant #", agg_num, " : ", si.name);
    this.mn[1]:look_health(si);
  endfor
  player:tell("-- bup fini --");
else
  player:tell("You have no opponents at the present time.");
endif
.

@verb #54585:"bal" none none none rxd
@program #54585:bal
" BAL - Lists current balance stored with Cog. Shows copper, silver and gold.";
this:update_usage(verb, player);
balance = #5104:get_balance(player);
player:tell("Current balance stored in Cog, with currency conversion:");
player:tell(" ", "Copper:", balance, "    Silver:", balance / 10, "    Gold:", balance / 100);
.

"#54585:11 --- Permission denied";
@verb #54585:"lda" none none none rxd
@program #54585:lda
" LDA - Last Doll Activity.  Crude and unscientific method to determine when";
"the last activity occured on your RPG doll. Helpful to know when you have";
"been away from the RPG and are concerned about your doll being reaped.";
this:update_usage(verb, player);
doll = this.mn[1]:get_doll(player);
if (!valid(doll))
  return player:tell("Sorry, you're beyond saving...");
endif
minutes_elapsed = (time() - doll.last_action) / 60;
hours_elapsed = minutes_elapsed / 60;
days_elapsed = hours_elapsed / 24;
reap_time = 90 - days_elapsed;
player:tell();
player:tell("Time elapsed since last activity : ", days_elapsed, " days. ", "(", hours_elapsed, " hours / ", minutes_elapsed, " minutes)");
player:tell("Estimated days to reaping : ", reap_time);
player:tell();
.

@verb #54585:"@im" any none none rxd
@program #54585:@im
this:update_usage(verb, player);
item = dobj;
if ($command_utils:object_match_failed(item, argstr))
  return;
endif
item_made = item.manufactured;
item_age = (((time() - item_made) / 60) / 60) / 24;
player:tell();
player:tell("Your ", item.name, " was made approximately ", item_age, " days ago.");
player:tell();
.

"***finished***