scure
Version:
Script Creation Utilities for Conversational Adventures (as Ric Escape)
44 lines (36 loc) • 1.55 kB
JavaScript
const { isEmptyArg } = require('../lib/common');
const { responses } = require('./pickup/responses');
const { matchesCondition } = require('../lib/conditions-evaluator');
const addToInventory = (data, itemId) => {
data.inventory = data.inventory || [];
data.inventory.push(itemId);
data.picked = data.picked || [];
data.picked.push(itemId);
return data;
};
const isNotPickableBecauseCondition = (item, data, scure) =>
item.pickable.isPickingCondition && !matchesCondition(data, scure)(item.pickable.condition);
const isNotPickable = item =>
!item.pickable.isPickingCondition && !item.pickable;
const scurePickup = (itemName, data, scure) => {
const { roomId } = data;
const item = scure.items.getItemByName(itemName);
if (isEmptyArg(itemName)) {
return responses.unknown(scure);
} else if (!item) {
return responses.notSeen(scure, itemName);
} else if (roomId !== item.location) {
return responses.notSeen(scure, item.name.toLowerCase());
} else if (scure.items.isInInventory(item.id, data.inventory)) {
return responses.alreadyInInventory(scure, item);
} else if (isNotPickableBecauseCondition(item, data, scure)) {
return responses.itemNotPickableBecauseCondition(scure, item);
} else if (isNotPickable(item)) {
return responses.itemNotPickable(scure, item);
} if (scure.items.isPicked(item.id, data.picked)) {
return responses.alreadyPicked(scure, item);
}
addToInventory(data, item.id);
return responses.pickedUp(scure, data, item);
};
exports.scurePickup = scurePickup;