Item drops array: Difference between revisions

From Kolmafia
Jump to navigation Jump to search
imported>Winterbay
m Added missing } in the example code
imported>Heeheehee
m Indentation to make it clearer why the brace was missing.
Line 59: Line 59:
<syntaxhighlight>
<syntaxhighlight>
void main() {
void main() {
record dropdata {
  record dropdata {
  item drop;
      item drop;
  int rate;
      int rate;
  string type;
      string type;
};
  };
dropdata [int] loc_mon_it;
  dropdata [int] loc_mon_it;
dropdata [monster][int] all_mon_drops;
  dropdata [monster][int] all_mon_drops;
foreach i1, mob in get_monsters($location[Orc Chasm])
  foreach i1, mob in get_monsters($location[Orc Chasm])
  foreach index, rec in item_drops_array(mob) {
      foreach index, rec in item_drops_array(mob) {
      all_mon_drops [mob][index].drop = rec.drop;
        all_mon_drops [mob][index].drop = rec.drop;
      all_mon_drops [mob][index].rate = rec.rate;
        all_mon_drops [mob][index].rate = rec.rate;
      all_mon_drops [mob][index].type = rec.type;
        all_mon_drops [mob][index].type = rec.type;
      }
 
  foreach mob, index, data in all_mon_drops {
      string rate = data.rate + "%";
      if(data.type == "0")
        rate = "unknown rate";
      if(data.type != "p" && data.type != "b")
        print(mob+", drops "+data.drop+" @ "+rate);
   }
   }
foreach mob, index, data in all_mon_drops {
  string rate = data.rate + "%";
  if(data.type == "0")
      rate = "unknown rate";
  if(data.type != "p" && data.type != "b")
      print(mob+", drops "+data.drop+" @ "+rate);
}
}
}
</syntaxhighlight>
</syntaxhighlight>

Revision as of 16:59, 16 May 2010

Function Syntax

record [int] item_drops_array()

record [int] item_drops_array(monster check_me )

  • check_me is the (optional) monster to check.

Returns an array of records with three fields:

record {
   item drop;
   int rate;
   string type;
};

The 'type' field has these currently possible values:

  • "" - normal item drop, base drop rate in the 'rate' field.
  • "0" - no drop rate information available, 'rate' will be zero.
  • "n" - not pickpocketable, but otherwise drops according to 'rate'.
  • "c" - conditional drop.
  • "p" - pickpocket-only.
  • "b" - bounty item, 'rate' is meaningless.

Since this is the first function to return a record, it cannot be stored to a variable, and thus the only way to access the data is by iterating over the elements in the array.

Code Samples

Prints all information Mafia has regarding the item drops of a certain monster.

void drops(monster mob){
   print("Monster: " + mob);
   foreach index, rec in item_drops_array(mob) 
      print("item: "+rec.drop+", drop rate: "+rec.rate+", type: "+rec.type);
}

Saves item drop information in a custom-defined map for later usage.

void main() {
   record dropdata {
      item drop;
      int rate;
      string type;
   };
   dropdata [int] loc_mon_it;
   dropdata [monster][int] all_mon_drops;
   foreach i1, mob in get_monsters($location[Orc Chasm])
      foreach index, rec in item_drops_array(mob) {
         all_mon_drops [mob][index].drop = rec.drop;
         all_mon_drops [mob][index].rate = rec.rate;
         all_mon_drops [mob][index].type = rec.type;
      }

   foreach mob, index, data in all_mon_drops {
      string rate = data.rate + "%";
      if(data.type == "0")
         rate = "unknown rate";
      if(data.type != "p" && data.type != "b")
         print(mob+", drops "+data.drop+" @ "+rate);
   }
}

See Also

meat_drop() | item_drops()

More Information

see this thread.

Special

The zero-parameter form returns the last monster encountered (the current one, if used in combat).