Monster hp: Difference between revisions

From Kolmafia
Jump to navigation Jump to search
imported>Eliteofdelete
No edit summary
imported>Eliteofdelete
No edit summary
 
Line 33: Line 33:
void kill (string monstername) {
void kill (string monstername) {
   monster mon = to_monster(monstername);
   monster mon = to_monster(monstername);
  int hp = monster_hp(mon);
  int def = max(0, monster_defense(mon));
   int weaponstat = buffed_hit_stat();
   int weaponstat = buffed_hit_stat();
   int total_dmg;
   int total_dmg;
Line 40: Line 42:
       weapon_multi = .75;
       weapon_multi = .75;
   else weapon_multi = 1.0;
   else weapon_multi = 1.0;
  int def = max(0, monster_defense(mon));
  int hp = monster_hp(mon);
   weapon_dmg = numeric_modifier("weapon damage");
   weapon_dmg = numeric_modifier("weapon damage");
   foreach it in $elements[]{
   foreach it in $elements[]{

Latest revision as of 03:10, 13 September 2019

Function Syntax

int monster_hp()

int monster_hp(monster check_me )

  • check_me is the (optional) monster to get the HP of

Returns the HP of the specified monster check_me. If check_me is not specified, it will return the HP of the current monster if you are in a fight (i.e. you're calling the function from an In-combat Consulting script), or the HP of the last monster you encountered otherwise. If you are in a fight, this will return the monster's current HP to the best of KoLmafia's knowledge.

The return value includes monster level modifications. This means that for monsters with unknown HP, the return value will initially be equivalent to monster_level_adjustment().

If you want to know the monster's raw HP without being modified by monster level adjustments, it is available through the monster.raw_hp proxy field.

Code Samples

Following code is a simplified function of weapon damage. It will tell how many rounds it takes to kill a monster based on its HP.

void kill (string monstername) {
   monster mon = to_monster(monstername);
   int hp = monster_hp(mon);
   int def = max(0, monster_defense(mon));
   int weaponstat = buffed_hit_stat();
   int total_dmg;
   string rounds;
   float weapon_multi, weapon_dmg, elemental_dmg;
   if (current_hit_stat() == $stat[moxie] && item_type(equipped_item($slot[weapon])) != "knife")
      weapon_multi = .75;
   else weapon_multi = 1.0;
   weapon_dmg = numeric_modifier("weapon damage");
   foreach it in $elements[]{
      string dmg = it+" damage";
      elemental_dmg += numeric_modifier(dmg);
   }
   total_dmg = floor((weaponstat*weapon_multi)-def+weapon_dmg+elemental_dmg);
   total_dmg = max(0, total_dmg);
   if (total_dmg > 0)
      rounds = to_string(max(1, round(hp/total_dmg)));
   else rounds = "infinity";
   print("Your expected damage on "+mon+" is "+total_dmg+". Assuming you always hit, it will take "+rounds+" round(s) to kill "+mon+".", "blue");
}
kill("bar");

Note: The example does not take crits/fumbles/hit chances into account. For more information on weapon damage see Weapon Damage.

See Also

monster_attack() | monster_defense() | monster_initiative() | monster_element()

More Information

For the current discussion of what's being tracked in-combat for monster level adjustments, please see this thread.

Special

If no monster is specified and no monster has been fought in this session, this function returns 0. This is because mafia forgets the value of last_monster() when it logs out.