Перейти к основному содержимому

IMonsterDatabase

Контракт только для чтения для запросов к базе данных монстров. Это публичная поверхность API для всех запросов к базе данных.

Пространство имён: OpenMon.MCE.SDK

Определение​

public interface IMonsterDatabase
{
MonsterEntry GetMonster(uint dexNumber);
MonsterEntry GetMonster(string name);
IReadOnlyList<MonsterEntry> GetAllMonsters();

Move GetMove(string name);
IReadOnlyList<Move> GetAllMoves();

Ability GetAbility(string name);
IReadOnlyList<Ability> GetAllAbilities();

Item GetItem(string name);
IReadOnlyList<Item> GetAllItems();

IReadOnlyList<MonsterType> GetAllTypes();
float GetTypeEffectiveness(MonsterType attackingType, MonsterType defendingType);

IReadOnlyList<Form> GetAllForms();

int MonsterCount { get; }
}

Методы​

GetMonster(uint dexNumber)​

Получить запись монстра по его национальному номеру в дексе.

ПараметрТипОписание
dexNumberuintУникальный номер в дексе

Возвращает: MonsterEntry или null, если не найден.

GetMonster(string name)​

Получить запись монстра по имени вида.

ПараметрТипОписание
namestringИмя вида (с учётом регистра)

Возвращает: MonsterEntry или null, если не найден.

GetAllMonsters()​

Получить все зарегистрированные записи монстров в базе данных.

Возвращает: IReadOnlyList<MonsterEntry> -- все виды, упорядоченные по номеру в дексе.

GetMove(string name)​

Получить приём по его имени.

Возвращает: Move или null, если не найден.

GetAllMoves()​

Получить все зарегистрированные приёмы.

Возвращает: IReadOnlyList<Move> -- все 640+ приёмов.

GetAbility(string name)​

Получить способность по её имени.

Возвращает: Ability или null, если не найдена.

GetAllAbilities()​

Получить все зарегистрированные способности.

Возвращает: IReadOnlyList<Ability>.

GetItem(string name)​

Получить предмет по его имени.

Возвращает: Item или null, если не найден.

GetAllItems()​

Получить все зарегистрированные предметы.

Возвращает: IReadOnlyList<Item>.

GetAllTypes()​

Получить все зарегистрированные типы монстров.

Возвращает: IReadOnlyList<MonsterType> -- 18 стандартных типов (или пользовательские типы, если изменены).

GetTypeEffectiveness(MonsterType, MonsterType)​

Получить множитель эффективности типа при атаке одного типа против другого.

ПараметрТипОписание
attackingTypeMonsterTypeТип приёма
defendingTypeMonsterTypeТип цели (одиночный тип)

Возвращает: float -- 0.0 (иммунитет), 0.5 (не очень эффективно), 1.0 (нейтрально) или 2.0 (супер-эффективно).

Двойные типы

Этот метод проверяет один атакующий тип против одного защищающегося типа. Для монстров с двойным типом вызовите его дважды и перемножьте результаты:

float effectiveness = db.GetTypeEffectiveness(moveType, defenderType1)
* db.GetTypeEffectiveness(moveType, defenderType2);

GetAllForms()​

Получить все зарегистрированные формы.

Возвращает: IReadOnlyList<Form>.

Свойства​

MonsterCount​

Общее количество записей монстров в базе данных.

Тип: int

Пример использования​

using System.Linq;

[Inject] private IMonsterCaptureEngine engine;

void Example()
{
IMonsterDatabase db = engine.Database;

// Find a specific monster — by name, or by National Dex number.
MonsterEntry sparkbit = db.GetMonster("Sparkbit");
MonsterEntry starter = db.GetMonster(1u);

// Types are ScriptableObjects, not an enum — fetch them from the database.
MonsterType fire = db.GetAllTypes().FirstOrDefault(t => t.name == "Fire");
MonsterType water = db.GetAllTypes().FirstOrDefault(t => t.name == "Water");

// Check a type matchup.
float eff = db.GetTypeEffectiveness(water, fire);
Debug.Log($"Water vs Fire: {eff}x"); // 2.0x

// Count all Fire-type species. A monster's types live on its per-form data
// (DataByFormEntry), reached through the MonsterEntry[form] indexer.
int fireCount = db.GetAllMonsters().Count(m =>
{
if (m.AvailableForms == null || m.AvailableForms.Count == 0) return false;
var data = m[m.AvailableForms[0]];
return data != null && (data.FirstType == fire || data.SecondType == fire);
});
Debug.Log($"Fire-type species: {fireCount}");
}