Files
pirate-corsaire-server/Game/Guild.js
T
2026-08-24 22:20:36 +02:00

144 lines
3.4 KiB
JavaScript

const InventoryList = require("./InventoryList");
const LEVELS = require("../Data/levels");
const GUILD_MAXIMUM_REQUESTS_SIZE = 100;
const ECONOMY = [1, 2];
const globalRequests = {};
class Guild {
constructor(info) {
this.id = info.id;
this.topic = `g${info.id}`;
this.name = info.name;
this.tag = info.tag;
this.description = info.description;
this.ownerID = info.ownerID;
this.bank = new GuildBank();
this.taxRates = info.taxRates;
this.experiencePoints = info.experiencePoints ?? 0;
this.level = LEVELS.guildLevel(this.experiencePoints) ?? 1;
this.size = 0;
this.sizeMaximum = 30;
this.members = [];
this.requests = [];
this.diplomacy = {};
this.timestamps = info.timestamps;
this.bank.depositTax({
categoryID: 1,
id: 1,
amount: 0
});
this.bank.depositTax({
categoryID: 1,
id: 2,
amount: 0
});
};
levelUpdate(amount) {
this.experiencePoints += amount;
if (this.level >= 25) return -1;
const newLevel = LEVELS.guildLevel(this.experiencePoints);
if (newLevel !== this.level) {
if (newLevel > 25) this.level = 25;
else this.level = newLevel;
return this.level;
};
return -1;
}
isLeader(playerID) {
return this.ownerID === playerID;
}
hasRequested(playerID) {
const isRequestPresent = this.requests.some(r => r.playerID === playerID);
return isRequestPresent;
}
setPermission(playerID, permission) {
const member = this.members.find(m => m.id === playerID);
if (!member) return;
member.permission = permission;
}
addRequest(playerID, message) {
//if (this.requestSize >= GUILD_MAXIMUM_REQUESTS_SIZE) return;
if (globalRequests[playerID] >= 8) return;
console.info(globalRequests[playerID], "request count for player", playerID);
if (globalRequests[playerID]) globalRequests[playerID]++;
else globalRequests[playerID] = 1;
const request = {
playerID,
message
};
this.requests.push(request);
return true;
}
removeRequest(playerID) {
if (globalRequests[playerID]) globalRequests[playerID]--;
this.requests = this.requests.filter(r => r.playerID !== playerID);
}
isMember(playerID) {
return this.members.find(member => member.id === playerID) ? true : false;
}
getMember(playerID) {
return this.members.find(member => member.id === playerID);
}
addMember(member) {
if (this.size >= this.sizeMaximum) return;
if (this.isMember(member.id)) return;
this.removeRequest(member.id);
this.members.push(member);
delete globalRequests[member.id];
this.size++;
return true;
}
removeMember(playerID) {
this.size--;
this.members = this.members.filter(member => member.id !== playerID);
}
};
class GuildBank {
constructor(info) {
this.list = new InventoryList();
this.deposits = [];
};
depositTax(resource) {
if (!ECONOMY.includes(resource.id)) return;
this.list.accumulateItem(resource.id, resource);
}
};
module.exports = Guild;