Skip to content
Robert Hafner edited this page Oct 22, 2017 · 3 revisions

qlib

The qlib libraries are all developed as part of the Quorum project. The global qlib object will load any of the qlib libraries.

This is a selection of interesting classes, but for a full list review the source code.

Events

This library is used to track the last occurrence of a specific event (which is just a unique string).

  • qlib.events.getEventTime(event)
  • qlib.events.recordEvent(event)
  • qlib.events.getTimeSinceEvent(event)

Genome

The Genome project is used to add variance to different bots that are running the NPC code. An instance of Genome takes a string (such as the bot name) as a constructor argument which feeds into a Lehmer RNG (thus giving it repeatable results).

The trait function uses this to return phenotype data, which is represented as an integer and can be restricted to specific ranges. Traits are weighted towards the center of the range (a range of 0-9 will have a 66.82% change of being 4, 5, or 6 and a less than 10% chance of getting 1, 2, 8 or 9. This makes extreme traits less likely to occur (but still possible). Each trait also takes an expected value which will always be returned if the bot is named Quorum.

let myGenome = new Genome('Bob')
// Default result of five (for Quorum), returns anywhere between 1 and 9 weighted for 5.
myGenome.trait('aggression', 5, {range: 4})
myGenome.trait('aggression', 5, {min: 1, max: 9})

Map

The qlib.map.findRoute function acts just like the Game.map.findRoute except it uses the default Quorum room scoring functions (which penalizes hostile rooms).

Market

The qlib.market functions supplement the existing market functions

  • qlib.market.getAveragePrice(resource, orderType) returns the rolling average price calculated over the last 37500 ticks.
  • qlib.market.getOrdersByType(resource, orderType)
  • qlib.market.getCurrentPrice(resource, orderType) returns the current price by calculating the order price after excluding the first 1000 units.
  • qlib.market.sellImmediately(resource, room, quantity)
  • qlib.market.buyImmediately(resource, room, quantity)
  • qlib.market.getHighestMineralValue() returns the cost of the highest valued base mineral (typically catalyst but it doesn't make that assumption).

Notify

The qlib.notify library is a wrapper around the screeps-notify project. It is used to send notifications to the #quorum-logs channel from the main Quorum account. When run as a bot on private servers it is a null operation.

soslibrary

cache

  • sos.lib.cache.get(label, opts)

    • ttl defines how long the cached item should be used. By placing it in the get function it can be adjusted based on the current system (for example, storing costmatrixes and then extending their TTL when the room isn't visible).
  • sos.lib.cache.set(label, data, opts)

    • persist pushes the object into Memory.
    • compress shrinks the object with lzstring.
    • maxttl puts a final expiration date on the stored object.
  • sos.lib.cache.clear() empties the entire cache.

counter

  • sos.lib.counter.get(group) returns an integer of increasing value with each call, starting with 1.
  • sos.lib.counter.set(group) overrides the current value with a supplied on.
  • sos.lib.counter.reset(group) clears the specified counter.

monitor

  • sos.lib.getPriorityRunStats(priority) returns an object describing how often programs at the specified priority run. The object has three values- short (last 200 ticks), medium (last 1000 ticks), long (last 3000 ticks). A value of 1 means it runs every tick, 2 means every other tick, and increasing values represent larger gaps. This function returns floats as well as integers.

uuid

  • sos.lib.uuid.v4 returns a UUID following the v4 standard. This is a big ugly string.
  • sos.lib.uuid.vs returns a unique string that is guaranteed to be unique, even across shards.

thirdparty

There are other libraries in the thirdparty directory.

  • creeptalk - this is how the creeps talk.
  • RoomVisual provides extra visualizations (structures and speech bubbles).
Clone this wiki locally