Files
db-mongo/mongo-init.js
T
legonzaur d402ead35a
release-tag / release-image (push) Successful in 10s
fix : add faction to effects
2024-08-04 18:33:49 +02:00

161 lines
3.6 KiB
JavaScript

rs.initiate();
db = db.getSiblingDB("heron");
const EffectType = {
CHAMPION_ACTION: "champion_action",
SUICIDE: "suicide",
FACTION_COMBO: "faction_combo",
CHAMPION_AMOUNT: "champion_amount",
TOTAL_DAMAGE: "total_damage",
CARD_AMOUNT: "card_amount",
ACTION_AMOUNT: "action_amount",
};
const CardRole = {
PERSONAL: "personal",
MARKET: "market",
FIRE_GEM: "fire_gem",
HUNTER: "hunter",
TRAVELER: "traveler",
CLERIC: "cleric",
FIGHTER: "fighter",
RANGER: "ranger",
THIEF: "thief",
WIZARD: "wizard",
HALF_DEMON: "half-demon",
DWARF: "dwarf",
ELF: "elf",
OGRE: "ogre",
ORC: "orc",
SMALLFOLK: "smallfolk",
};
function createEffectCondition(json, cardUUID) {
const createdCondition = {};
if (typeof json === "string") {
createdCondition.effectId = json;
if (json == EffectType.FACTION_COMBO) {
createdCondition.faction = cardUUID.faction;
}
createdCondition.amount = 1;
} else {
createdCondition.effectId = json.id;
createdCondition.amount = json.amount ?? 1;
createdCondition.cardId = json.card_id;
if (json.id == EffectType.FACTION_COMBO) {
createdCondition.faction = json.faction ?? cardUUID.faction;
}
}
return createdCondition;
}
function createEffects(card, cardUUID) {
if (card.effects) {
return card.effects.map((e) => {
const createdEffect = {
card: cardUUID,
effect: e.effect,
amount: e.amount ?? 1,
subEffects: [],
times: e.times ?? 1,
per: e.per,
faction: card.faction,
};
if (e.sub_effects) {
createdEffect.subEffects = createEffects(e.sub_effects, cardUUID);
}
if (e.effect_type) {
createdEffect.condition = createEffectCondition(
e.effect_type,
cardUUID
);
}
if (e.mutex) {
createdEffect.mutex = e.mutex.toString();
}
const { insertedId } = db.effects.insertOne(createdEffect);
return insertedId;
});
}
}
function createCard(json, pack, playerIndex) {
const createdCard = {
cardId: json.id,
role: json.role,
cardType: json.card_type,
faction: json.faction,
name: json.name,
pack: pack,
playerIndex,
effects: [],
};
if (json.cost) {
createdCard.cost = json.cost;
}
if (json.defense) {
createdCard.defense = json.defense;
}
if (json.guard !== undefined) {
createdCard.guard = json.guard;
}
const { insertedId } = db.cards.insertOne(createdCard);
if (json.effects) {
db.cards.updateOne(
{ _id: insertedId },
{ $set: { effects: createEffects(json, insertedId) } }
);
}
}
async function loadCards() {
const cardPath = "/cards-json";
const files = fs.readdirSync(cardPath).filter((e) => e.endsWith(".json"));
const processed = await Promise.all(
files.map(async (f) => {
return [
path.parse(f).name,
JSON.parse(fs.readFileSync(path.join(cardPath, f), "utf8")).cards,
];
})
);
Object.entries(processed)
.filter((d) => d[1] && d[1][1])
.forEach(
// eslint-disable-next-line @typescript-eslint/no-unused-vars
([_, data]) => {
data[1].forEach((c) => {
if (c.role == CardRole.FIRE_GEM || c.role == CardRole.MARKET) {
for (let i = 0; i < (c.init_amount ?? 1); i++) {
createCard(c, data[0]);
}
} else {
for (let j = 0; j < 4; j++) {
for (let i = 0; i < (c.init_amount ?? 1); i++) {
createCard(c, data[0], j);
}
}
}
});
}
);
}
loadCards();