dcl-npc-toolkit-ai-version
Version:
A collection of tools for creating Non-Player-Characters (NPCs). These are capable of having conversations with the player, and play different animations. AI usage is added atop of it
83 lines • 13.1 kB
JavaScript
import * as utils from '@dcl-sdk/utils';
import { XMLHttpRequest } from './xmlhttprequest';
import { TextEncoder } from 'text-encoding';
import 'core-js/features/url';
import { timers } from '@dcl-sdk/utils';
Object.assign(globalThis, {
FormData: class FormData {
},
clearTimeout: timers.clearTimeout,
setTimeout: timers.setTimeout
});
globalThis.TextEncoder = TextEncoder;
function clearTimeout(timer) {
if (timer !== undefined) {
utils.timers.clearTimeout(timer);
}
}
function setTimeout(fn, time) {
return utils.timers.setTimeout(fn, time);
}
class FormData {
}
class InvalidCharacterError extends Error {
}
var error = function (message) {
throw new InvalidCharacterError(message);
};
var TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var REGEX_SPACE_CHARACTERS = /<%= spaceCharacters %>/g;
const btoaEncode = function (input) {
input = String(input);
if (/[^\0-\xFF]/.test(input)) {
error('The string to be encoded contains characters outside of the ' +
'Latin1 range.');
}
var padding = input.length % 3;
var output = '';
var position = -1;
var a;
var b;
var c;
var buffer;
var length = input.length - padding;
while (++position < length) {
a = input.charCodeAt(position) << 16;
b = input.charCodeAt(++position) << 8;
c = input.charCodeAt(++position);
buffer = a + b + c;
output += (TABLE.charAt(buffer >> 18 & 0x3F) +
TABLE.charAt(buffer >> 12 & 0x3F) +
TABLE.charAt(buffer >> 6 & 0x3F) +
TABLE.charAt(buffer & 0x3F));
}
if (padding == 2) {
a = input.charCodeAt(position) << 8;
b = input.charCodeAt(++position);
buffer = a + b;
output += (TABLE.charAt(buffer >> 10) +
TABLE.charAt((buffer >> 4) & 0x3F) +
TABLE.charAt((buffer << 2) & 0x3F) +
'=');
}
else if (padding == 1) {
buffer = input.charCodeAt(position);
output += (TABLE.charAt(buffer >> 2) +
TABLE.charAt((buffer << 4) & 0x3F) +
'==');
}
return output;
};
export const base64 = {
'encode': btoaEncode,
};
Object.assign(globalThis, {
FormData: FormData,
XMLHttpRequest: XMLHttpRequest,
clearTimeout: clearTimeout,
setTimeout: setTimeout,
btoa: btoaEncode,
});
if (console != null && !console.warn)
console.warn = (...args) => console.log('WARNING', ...args);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjbGFyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcGF0aWJpbGl0eS9wb2x5ZmlsbC9kZWNsYXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUlqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sc0JBQXNCLENBQUE7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO0lBQ3pCLFFBQVEsRUFBRSxNQUFNLFFBQVE7S0FBRztJQUMzQixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7SUFDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO0NBQzNCLENBQUMsQ0FBQTtBQTRCSCxVQUFnQyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFHNUQsU0FBUyxZQUFZLENBQUMsS0FBMkM7SUFHN0QsSUFBRyxLQUFLLEtBQUssU0FBUyxFQUFDLENBQUM7UUFDcEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBWSxDQUFDLENBQUE7SUFDM0MsQ0FBQztBQUNMLENBQUM7QUFDRCxTQUFTLFVBQVUsQ0FBQyxFQUFXLEVBQUMsSUFBVztJQUd2QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFFLEVBQUUsRUFBRSxJQUFJLENBQUUsQ0FBQTtBQUM5QyxDQUFDO0FBQ0QsTUFBTSxRQUFRO0NBQUU7QUFXWixNQUFNLHFCQUFzQixTQUFRLEtBQUs7Q0FBRTtBQUUzQyxJQUFJLEtBQUssR0FBRyxVQUFTLE9BQVc7SUFHNUIsTUFBTSxJQUFJLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQztBQUVGLElB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QVEsRUFBRSxRQUFRO0lBQ2xCLGNBQWMsRUFBRSxjQUFjO0lBQzlCLFlBQVksRUFBRSxZQUFZO0lBQzFCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLElBQUksRUFBRSxVQUFVO0NBQ25CLENBQUMsQ0FBQTtBQUVGLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxDQUFFLE9BQWUsQ0FBQyxJQUFJO0lBQUcsT0FBZSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnQGRjbC1zZGsvdXRpbHMnXG5pbXBvcnQgeyBYTUxIdHRwUmVxdWVzdCB9IGZyb20gJy4veG1saHR0cHJlcXVlc3QnXG4vL2NvbnNvbGUubG9nKFwiREVDTEFSSU5HISEhXCIpXG5cbnR5cGUgVGltZW91dD17fVxuaW1wb3J0IHsgVGV4dEVuY29kZXIgfSBmcm9tICd0ZXh0LWVuY29kaW5nJztcbmltcG9ydCAnY29yZS1qcy9mZWF0dXJlcy91cmwnXG5pbXBvcnQgeyB0aW1lcnMgfSBmcm9tICdAZGNsLXNkay91dGlscydcblxuT2JqZWN0LmFzc2lnbihnbG9iYWxUaGlzLCB7XG5cdEZvcm1EYXRhOiBjbGFzcyBGb3JtRGF0YSB7fSxcblx0Y2xlYXJUaW1lb3V0OiB0aW1lcnMuY2xlYXJUaW1lb3V0LFxuXHRzZXRUaW1lb3V0OiB0aW1lcnMuc2V0VGltZW91dFxuICB9KVxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICBUZXh0RW5jb2RlcjogdHlwZW9mIFRleHRFbmNvZGVyO1xuICB9XG4gIGludGVyZmFjZSBIZWFkZXJzIHtcblx0YXBwZW5kKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cdGRlbGV0ZShuYW1lOiBzdHJpbmcpOiB2b2lkO1xuXHRnZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbDtcblx0aGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cdHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuXHQvLyBBZGQgYW55IG90aGVyIG1ldGhvZHMgeW91IHVzZSBmcm9tIHRoZSBIZWFkZXJzIGludGVyZmFjZVxuXHQvLyBUaGlzIGlzIGEgbWluaW1hbCBleGFtcGxlOyBhZGp1c3QgYWNjb3JkaW5nIHRvIHlvdXIgbmVlZHNcbiAgfVxuICBjbGFzcyBVUkwge1xuXHRjb25zdHJ1Y3RvcihpbnB1dDogc3RyaW5nLCBiYXNlPzogc3RyaW5nIHwgVVJMKTtcblx0Ly8gQWRkIGFueSBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIHlvdSBuZWVkIGZyb20gdGhlIFVSTCBjbGFzc1xuXHRocmVmOiBzdHJpbmc7XG5cdC8vIEV4YW1wbGUgcHJvcGVydGllc1xuXHRwcm90b2NvbDogc3RyaW5nO1xuXHRob3N0bmFtZTogc3RyaW5nO1xuXHRwYXRobmFtZTogc3RyaW5nO1xuXHRzZWFyY2g6IHN0cmluZztcblx0aGFzaDogc3RyaW5nO1xuXHQvLyBldGMuXG4gIH1cbn1cblxuKGdsb2JhbFRoaXMgYXMgdW5rbm93biBhcyBHbG9iYWwpLlRleHRFbmNvZGVyID0gVGV4dEVuY29kZXI7XG5cblxuZnVuY3Rpb24gY2xlYXJUaW1lb3V0KHRpbWVyOnN0cmluZyB8IG51bWJlciB8IFRpbWVvdXQgfCB1bmRlZmluZWQpe1xuICAgIC8vY29uc29sZS5sb2coXCJERUNMQVJJTkdcIixcImNsZWFyVGltZW91dCBjYWxsZWQhISFcIix0aW1lcilcbiAgICAvL3NpbXVsYXRlXG4gICAgaWYodGltZXIgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgIHV0aWxzLnRpbWVycy5jbGVhclRpbWVvdXQodGltZXIgYXMgYW55KVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNldFRpbWVvdXQoZm46KCk9PnZvaWQsdGltZTpudW1iZXIpe1xuICAgIC8vY29uc29sZS5sb2coXCJERUNMQVJJTkdcIixcInNldFRpbWVvdXQgY2FsbGVkISEhXCIsZm4sdGltZSlcbiAgICAvL3NpbXVsYXRlXG4gICAgcmV0dXJuIHV0aWxzLnRpbWVycy5zZXRUaW1lb3V0KCBmbiwgdGltZSApXG59XG5jbGFzcyBGb3JtRGF0YXt9IFxuXG4vL2h0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL2Jhc2U2NC9ibG9iL21hc3Rlci9zcmMvYmFzZTY0LmpzXG4vL3N0YXJ0IGJhc2U2NCBlbmNvZGVcbiAgICAvKnZhciBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlOmFueSkge1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH07XG4gICAgXG4gICAgSW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcbiAgICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcbiAgICAqL1xuICAgIGNsYXNzIEludmFsaWRDaGFyYWN0ZXJFcnJvciBleHRlbmRzIEVycm9ye31cblxuICAgIHZhciBlcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2U6YW55KSB7XG4gICAgICAgIC8vIE5vdGU6IHRoZSBlcnJvciBtZXNzYWdlcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlIG1hdGNoIHRob3NlIHVzZWQgYnlcbiAgICAgICAgLy8gdGhlIG5hdGl2ZSBgYXRvYmAvYGJ0b2FgIGltcGxlbWVudGF0aW9uIGluIENocm9taXVtLlxuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xuICAgIH07XG5cbiAgICB2YXIgVEFCTEUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG4gICAgLy8gaHR0cDovL3doYXR3Zy5vcmcvaHRtbC9jb21tb24tbWljcm9zeW50YXhlcy5odG1sI3NwYWNlLWNoYXJhY3RlclxuICAgIHZhciBSRUdFWF9TUEFDRV9DSEFSQUNURVJTID0gLzwlPSBzcGFjZUNoYXJhY3RlcnMgJT4vZztcbiAgICAvLyBgZW5jb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGJ0b2FgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZDogaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1idG9hXG5cdGNvbnN0IGJ0b2FFbmNvZGUgPSBmdW5jdGlvbihpbnB1dDpzdHJpbmcpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dCk7XG5cdFx0aWYgKC9bXlxcMC1cXHhGRl0vLnRlc3QoaW5wdXQpKSB7XG5cdFx0XHQvLyBOb3RlOiBubyBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhc3RyYWwgc3ltYm9scyBoZXJlLCBhcyBzdXJyb2dhdGVzIGFyZVxuXHRcdFx0Ly8gbWF0Y2hlZCwgYW5kIHRoZSBpbnB1dCBpcyBzdXBwb3NlZCB0byBvbmx5IGNvbnRhaW4gQVNDSUkgYW55d2F5LlxuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIG9mIHRoZSAnICtcblx0XHRcdFx0J0xhdGluMSByYW5nZS4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgcGFkZGluZyA9IGlucHV0Lmxlbmd0aCAlIDM7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHZhciBhO1xuXHRcdHZhciBiO1xuXHRcdHZhciBjO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0Ly8gTWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgbG9vcC5cblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gcGFkZGluZztcblxuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBSZWFkIHRocmVlIGJ5dGVzLCBpLmUuIDI0IGJpdHMuXG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgMTY7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YyA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYiArIGM7XG5cdFx0XHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXG5cdFx0XHQvLyBtYXRjaGluZyBjaGFyYWN0ZXIgZm9yIGVhY2ggb2YgdGhlbSB0byB0aGUgb3V0cHV0LlxuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxOCAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiA2ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyICYgMHgzRilcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhZGRpbmcgPT0gMikge1xuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDg7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA+PiA0KSAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgMikgJiAweDNGKSArXG5cdFx0XHRcdCc9J1xuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHBhZGRpbmcgPT0gMSkge1xuXHRcdFx0YnVmZmVyID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbik7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDIpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgNCkgJiAweDNGKSArXG5cdFx0XHRcdCc9PSdcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcbiAgICBleHBvcnQgY29uc3QgYmFzZTY0ID0ge1xuXHRcdCdlbmNvZGUnOiBidG9hRW5jb2RlLFxuXHRcdC8vJ2RlY29kZSc6IGRlY29kZSxcblx0XHQvLyd2ZXJzaW9uJzogJzwlPSB2ZXJzaW9uICU+J1xuXHR9O1xuLy9lbmQgYmFzZTY0IGVuY29kZVxuXG4vKipcbiAqIFRoaXMgaXMgYSB3b3JrYXJvdW5kIHRvIHNvbHZlIGEgcnVudGltZSBpc3N1ZXNcbiAqIFxuICovXG5PYmplY3QuYXNzaWduKGdsb2JhbFRoaXMsIHtcbiAgICBGb3JtRGF0YTogRm9ybURhdGEsXG4gICAgWE1MSHR0cFJlcXVlc3Q6IFhNTEh0dHBSZXF1ZXN0LFxuICAgIGNsZWFyVGltZW91dDogY2xlYXJUaW1lb3V0LFxuICAgIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQsXG4gICAgYnRvYTogYnRvYUVuY29kZSxcbn0pXG5cbmlmIChjb25zb2xlICE9IG51bGwgJiYgIShjb25zb2xlIGFzIGFueSkud2FybikgKGNvbnNvbGUgYXMgYW55KS53YXJuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZygnV0FSTklORycsIC4uLmFyZ3MpIl19