const GuildDataEconomyDonatedPacket = require("../Packets/GuildDataEconomyDonated"); const Game = require("../Game/Game"); module.exports = async function (ws, message, player) { if (!player.guild.id) return; if (player.pirateLevel < 10) return console.info("pirate level donate"); const categoryID = 1; const resourceID = message.getUint8(1); const amount = message.getUint32(2); const playerEconomy = player.inventory.getEconomy(); const economyResource = playerEconomy.find(r => r.id === resourceID); if (economyResource.amount < amount) return console.info("not enough resource", economyResource); const guildEconomy = player.guild.bank.list.getElement(resourceID); if (!guildEconomy) return; let dbConnection = null; try { dbConnection = await db.getConnection(); await dbConnection.beginTransaction(); await dbConnection.execute("INSERT INTO resources (playerID, categoryID, itemID, amount) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE amount = ?", [player.id, categoryID, resourceID, economyResource.amount - amount, economyResource.amount - amount]); await dbConnection.execute("INSERT INTO guildresources (guildID, categoryID, itemID, amount) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE amount = ?", [player.guild.id, categoryID, resourceID, guildEconomy.amount + amount, guildEconomy.amount + amount]); await dbConnection.commit(); const amountCapped = player.inventory.alterAmount(categoryID, resourceID, amount); const resource = { categoryID, id: resourceID, amount: amountCapped }; player.guild.bank.depositTax(resource); console.info("success desposit", resource); const topic = Game.getTopic(player.guild.topic); const guildDataEconomyDonatedPacket = GuildDataEconomyDonatedPacket(resource); topic.push(guildDataEconomyDonatedPacket); } catch (e) { console.info(e) await dbConnection.rollback(); const resource = { categoryID, id: resourceID, amount: 0 }; const guildDataEconomyDonatedPacket = GuildDataEconomyDonatedPacket(resource); player.map.registerIndividualNetworkPacket(player.id, guildDataEconomyDonatedPacket); } finally { dbConnection.release(); }; };