Blackboard

The blackboard is basically a global database that can be used to store generic data records. Items on the blackboard are made up of several common properties, and any number of additional user properties that can be passed as part of the table.

These properties are **required** for every record posted.

* Owner - The owner id
* Target - The target id
* Duration - How long does it take for the record to expire
* DeleteOnExpire - Whether the record is automatically deleted when it expires

What each property means is normally dependent on the type of blackboard record. The Owner is typically the game id of the bot, the target is normally an id that can be mapped to another object, such as a MapGoal serial number. The other properties control the records lifetime.

## Blackboard Functions

### MakeKey

Makes a numeric blackboard item key. Normally you will inject this value into the global BB table with the rest of the blackboard keys.

**Parameters:** none

**Returns:** numeric key.

**Example:**

```
 BB.MYNEWKEY = Blackboard.MakeKey();

```

### PostRecord

Posts a record to the blackboard, keyed to a certain type, and storing arbitrary values.

**Parameters:** (blackboard key, table)

**Returns:** none

**Example:**

```
 mytable =
 {
 Owner = b.GetGameId(),
 Target = 100,
 Duration = 10,
 DeleteOnExpire = true,

 someinfo = 10,
 someinfo2 = 20,
 };
 Blackboard.PostRecord(BB.MYNEWKEY, mytable);

```

### GetRecords

Retrieves all records matching a type from global Blackboard

**Parameters:** (blackboard key)

**Returns:** table of all blackboard records, null if non exist.

**Example:**

```
 records = Blackboard.GetRecords(BB.MYNEWKEY);
 if(records)
 {
 foreach ( i and rcd in records )
 {
 print(rcd.someinfo);
 print(rcd.someinfo2);
 }
 }

```

### GetNumRecords

Retrieves the number of records of a given type.

**Parameters:** (blackboard key)

**Returns:** number of records that exist of this type.

**Example:**

```
 numrecords = Blackboard.GetNumRecords(BB.MYNEWKEY);

```

### RecordExistsOwner

Checks if a record exists for a certain key that matches a given owner id.

**Parameters:** (blackboard key, owner id #)

**Returns:** number of records that exist of this type.

**Example:**

```
 if(Blackboard.RecordExistsOwner(BB.MYNEWKEY, b.GetGameId())
 {
 }

```

### RecordExistsTarget

Checks if a record exists for a certain key that matches a given target id.

**Parameters:** (blackboard key, target id #)

**Returns:** number of records that exist of this type.

**Example:**

```
 if(Blackboard.RecordExistsTarget(BB.MYNEWKEY, mapgoal.GetSerialNum())
 {
 }

```

### RemoveByPoster

Removes all records of a given type by the given owner id.

**Parameters:** (owner id #) - If key type is left off, removes ALL records

**Parameters:** (owner id #, blackboard key type to remove)

**Returns:** number of records removed

**Example:**

```
 // remove just my record type from this owner
 numremoved1 = Blackboard.RemoveByPoster(b.GetGameId(), BB.MYNEWKEY);
 // remove all records of all types for this owner
 numremoved2 = Blackboard.RemoveByPoster(b.GetGameId());

```

### RemoveByTarget

Removes all records of a given type by the given target id.

**Parameters:** (target id #) - If key type is left off, removes ALL records

**Parameters:** (target id #, blackboard key type to remove)

**Returns:** number of records removed

**Example:**

```
 // remove just my record type from this owner
 numremoved1 = Blackboard.RemoveByTarget(b.GetGameId(), BB.MYNEWKEY);
 // remove all records of all types for this owner
 numremoved2 = Blackboard.RemoveByTarget(b.GetGameId());

```

### PrintBlackboard

Prints the global blackboard to the in game console.

**Parameters:** () - if key left off, prints records of ALL types.

**Parameters:** (blackboard key) - only print records of this type.

**Returns:** none

**Example:**

```
 Blackboard.PrintBlackboard();
 Blackboard.PrintBlackboard(BB.MYNEWKEY);

```