pw-js-world
Version:
An optional package for PW-JS-Api, aims to serve world purposes.
170 lines • 11.4 kB
JavaScript
import { map } from "./util/Misc.js";
export default 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: 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
};
}
}
export 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;
}
}
/**
* 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 = {}));
export 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");
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL1BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFvSnJDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sTUFBTTtJQXNEdkIsWUFBWSxLQUFnQyxFQUFFLE1BQStIOztRQVY3Szs7V0FFRztRQUNILFlBQU8sR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVoRDs7V0FFRztRQUNILFNBQUksR0FBWSxLQUFLLENBQUM7UUFHbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsa0JBQWtCLDBDQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7WUFDakQsQ0FBQyxFQUFFLE1BQUEsS0FBSyxDQUFDLGtCQUFrQiwwQ0FBRSxRQUFRLENBQUMsQ0FBQztZQUN2QyxDQUFDLEVBQUUsTUFBQSxLQUFLLENBQUMsa0JBQWtCLDBDQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7WUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRztnQkFDZixpQkFBaUIsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQjtnQkFDakQsc0JBQXNCLEVBQUUs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