;"QuestCore2 Patch 001"
;"5/26/2022"
;"questcore2_patch_001.txt"
;"This patch fixes a bug in the code for the @kgen command which causes the operation to fail"
;"if the target object's 'ammo_type' property is set to #-1."

;"To install this patch, copy and paste this entire file into the MUD client."
;"NOTE: You must be logged in to an account with wizard permissions."

@prog #57:@kgen
if (!argstr)
  return player:tell("You must specify an object.");
endif
if (parent(player) == $rpgamer)
  return player:tell("You cannot use this function.");
endif
target = $string_utils:match_object(dobjstr, $nothing);
if (target == $failed_match)
  return player:tell("\"", dobjstr, "\" could not be matched.");
endif
if (parent(target) == $monster)
  n = {};
  n = setadd(n, $string_utils:uppercase(target.name));
  if (target.magic_immunity)
    n = setadd(n, "[IMMUNE TO MAGIC]");
  endif
  n = setadd(n, target.description);
  if (target.greedy)
    n = setadd(n, "(May pick up items.)");
  else
    n = setadd(n, "(Does not pick up items.)");
  endif
  st = "STR: " + floatstr(target.stats[2][1], 1) + " DEX: " + floatstr(target.stats[2][2], 1) + " INT: " + floatstr(target.stats[2][3], 1) + " HEA: " + floatstr(target.stats[2][4], 1) + " COM: " + floatstr(target.skills[2][1], 1);
  n = setadd(n, st);
  xph = "XP: " + tostr(target.exp) + " Hostility: " + tostr(target.hostility);
  n = setadd(n, xph);
  if (target.weapon_types == {})
    n = setadd(n, "Weapons: N/A");
  else
    n = setadd(n, tostr("Weapons: ", $string_utils:title_list(target.weapon_types)));
  endif
  if (target.natural_def == 0)
    n = setadd(n, "Natural Defense: Bite");
  elseif (target.natural_def == 1)
    n = setadd(n, "Natural Defense: Claw");
  elseif (target.natural_def == 3)
    n = setadd(n, "Natural Defense: Hand");
  endif
  n = setadd(n, tostr("Treasure: ", floatstr(target.money[1][2], 1), " Gold"));
  if (!target.edible)
    n = setadd(n, "Not Edible");
  else
    n = setadd(n, tostr("Edible | Eat Healing: ", floatstr(target.eat_heal, 1)));
  endif
  tm = "Rot Time: " + tostr(target.rot_time) + " sec. | Gestate Time: " + tostr(target.gestate) + " sec.";
  n = setadd(n, tm);
  player:tell_lines(n);
  player:tell();
  target.learn = n;
  player:tell("[purple]Knowledge for ", $string_utils:nn(target), " has been set.[normal]");
elseif (parent(target) == $weapon)
  n = {};
  n = setadd(n, $string_utils:uppercase(target.name));
  if (target.shoots)
    n = setadd(n, "Ranged Weapon");
  else
    n = setadd(n, "Melee Weapon");
  endif
  n = setadd(n, target.description);
  if (target.shoots)
    n = setadd(n, tostr(target.ammo_type != #-1 ? ("Ammunition Type: " + target.ammo_type.name) | "[Infinite Ammunition]"));
	if (target.ammo_type != #-1)
      n = setadd(n, tostr("Maximum Load: ", tostr(target.max_load)));
	endif
    n = setadd(n, tostr("Projectile Damage: ", tostr(target.projectile_dam)));
  else
    n = setadd(n, tostr("Damage Base: ", tostr(target.damage_base)));
  endif
  n = setadd(n, tostr("Value: ", tostr(target.value_base)));
  if (target.can_stun && target.can_paralyse)
    n = setadd(n, "Can Stun | Can Paralyze");
  elseif (target.can_stun && !target.can_paralyse)
    n = setadd(n, "Can Stun | Cannot Paralyze");
  elseif (!target.can_stun && target.can_paralyse)
    n = setadd(n, "Cannot Stun | Can Paralyze");
  elseif (!target.can_stun && !target.can_paralyse)
    n = setadd(n, "Cannot Stun | Cannot Paralyze");
  endif
  player:tell_lines(n);
  player:tell();
  target.learn = n;
  player:tell("[purple]Knowledge for ", $string_utils:nn(target), " has been set.[normal]");
elseif (parent(target) == $clothing)
  n = {};
  n = setadd(n, $string_utils:uppercase(target.name));
  n = setadd(n, target.description);
  n = setadd(n, tostr("Armor: ", tostr(target.armor)));
  n = setadd(n, tostr("Value: ", tostr(target.value_base)));
  n = setadd(n, tostr("Body Area: ", $string_utils:capitalize(target.body_area)));
  player:tell_lines(n);
  player:tell();
  target.learn = n;
  player:tell("[purple]Knowledge for ", $string_utils:nn(target), " has been set.[normal]");
else
  return player:tell("Parent of argument must be $monster, $weapon, or $clothing.");
endif
.

;"End of Patch 001"