pw-js-world
Version:
An optional package for PW-JS-Api, aims to serve world purposes.
176 lines • 11.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PlayerCounters = exports.PlayerEffect = void 0;
const Misc_js_1 = require("./util/Misc.js");
class Player {
constructor(props, states) {
var _a, _b, _c;
/**
* List of active effects the player has.
*/
this.effects = new Map();
/**
* If this player is the bot.
*/
this.isMe = false;
this.accountId = props.accountId;
this.face = props.face;
this.isFriend = props.isFriend;
this.isWorldOwner = props.isWorldOwner;
this.playerId = props.playerId;
this.position = ((_a = props.lastMovementPacket) === null || _a === void 0 ? void 0 : _a.position) ? {
x: (_b = props.lastMovementPacket) === null || _b === void 0 ? void 0 : _b.position.x,
y: (_c = props.lastMovementPacket) === null || _c === void 0 ? void 0 : _c.position.y
} : undefined;
if (!props.rights)
this.resetRights();
else
this.rights = {
availableCommands: props.rights.availableCommands,
canChangeWorldSettings: props.rights.canChangeWorldSettings,
canEdit: props.rights.canEdit,
canGod: props.rights.canGod,
canToggleMinimap: props.rights.canToggleMinimap,
};
this.role = props.role;
this.username = props.username;
if (typeof states === "boolean") {
this.isMe = states;
states = undefined;
}
if (!states) {
// Could be bot via init that don't get states.
this.resetState();
}
else
this.states = {
coins: {
blue: states.coinsBlue,
gold: states.coinsGold,
},
collectedItems: (0, Misc_js_1.map)(states.collectedItems, v => ({ x: v.x, y: v.y })),
deaths: states.deaths,
godmode: states.godmode,
hasGoldCrown: states.hasGoldCrown,
hasSilverCrown: states.hasSilverCrown,
modmode: states.modmode,
switches: states.switches,
teamId: states.teamId,
counters: states.counters
};
}
/**
* This is destructive, this is only for on reset packet.
*/
resetState() {
this.states = {
coins: {
blue: 0,
gold: 0
},
collectedItems: [],
deaths: 0,
godmode: false,
hasGoldCrown: false,
hasSilverCrown: false,
modmode: false,
switches: new Array(1000).fill(false),
teamId: 0,
counters: new PlayerCounters()
};
}
/**
* Destructive.
*/
resetRights() {
this.rights = {
availableCommands: [],
canChangeWorldSettings: false,
canEdit: false,
canGod: false,
canToggleMinimap: false
};
}
}
exports.default = Player;
class PlayerEffect {
constructor(effect, triggeredAt) {
this.effectId = effect.effectId;
this.duration = effect.duration;
this.strength = effect.strength;
this.triggeredAt = triggeredAt !== null && triggeredAt !== void 0 ? triggeredAt : Date.now();
}
/**
* Note: If this effect is non timed, this will always return false.
*/
get hasExpired() {
if (this.duration === undefined)
return false;
return Date.now() > (this.triggeredAt + this.duration);
}
/**
* Milliseconds showing how long before this expires.
*
* Note: If this effect is non timed, this will return infinity.
*/
get remaining() {
if (this.duration === undefined)
return Infinity;
return Math.max(0, Date.now() - (this.triggeredAt + this.duration));
}
/**
* @ignore
*/
_update(obj) {
if (obj.duration !== undefined)
this.duration = obj.duration;
if (obj.strength !== undefined)
this.strength = obj.strength;
}
toJSON() {
const obj = { effectId: this.effectId };
if (this.duration)
obj["duration"] = this.duration;
if (this.strength)
obj["strength"] = this.strength;
return obj;
}
}
exports.PlayerEffect = PlayerEffect;
/**
* Index based
*/
var CounterKeys;
(function (CounterKeys) {
CounterKeys[CounterKeys["WHITE"] = 0] = "WHITE";
CounterKeys[CounterKeys["GRAY"] = 1] = "GRAY";
CounterKeys[CounterKeys["BLACK"] = 2] = "BLACK";
CounterKeys[CounterKeys["RED"] = 3] = "RED";
CounterKeys[CounterKeys["ORANGE"] = 4] = "ORANGE";
CounterKeys[CounterKeys["YELLOW"] = 5] = "YELLOW";
CounterKeys[CounterKeys["GREEN"] = 6] = "GREEN";
CounterKeys[CounterKeys["CYAN"] = 7] = "CYAN";
CounterKeys[CounterKeys["BLUE"] = 8] = "BLUE";
CounterKeys[CounterKeys["MAGENTA"] = 9] = "MAGENTA";
})(CounterKeys || (CounterKeys = {}));
class PlayerCounters {
constructor(scores = []) {
var _a;
this.scores = [];
for (let i = 0; i < 10; i++) {
this.scores[i] = (_a = scores[i]) !== null && _a !== void 0 ? _a : 0;
}
}
get(id) {
if (typeof id === "number")
return this.scores[id];
const index = CounterKeys[id.toUpperCase()];
if (index !== undefined) {
return this.scores[index];
}
else
throw Error("Unknown colour");
}
}
exports.PlayerCounters = PlayerCounters;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL1BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSw0Q0FBcUM7QUFvSnJDLE1BQXFCLE1BQU07SUFzRHZCLFlBQVksS0FBZ0MsRUFBRSxNQUErSDs7UUFWN0s7O1dBRUc7UUFDSCxZQUFPLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFaEQ7O1dBRUc7UUFDSCxTQUFJLEdBQVksS0FBSyxDQUFDO1FBR2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLGtCQUFrQiwwQ0FBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUMsRUFBRSxNQUFBLEtBQUssQ0FBQyxrQkFBa0IsMENBQUUsUUFBUSxDQUFDLENBQUM7WUFDdkMsQ0FBQyxFQUFFLE1BQUEsS0FBSyxDQUFDLGtCQUFrQiwwQ0FBRSxRQUFRLENBQUMsQ0FBQztTQUMxQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7O1lBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUc7Z0JBQ2YsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUI7Z0JBQ2pELHNCQUFzQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsc0JBQXNCO2dCQUMzRCxPQUFPLEVB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