Fist Push

This commit is contained in:
troispoils 2024-05-07 18:01:11 +02:00
parent dd63653413
commit cab9de1e90
118 changed files with 364726 additions and 0 deletions

169
server/.gitignore vendored Normal file
View file

@ -0,0 +1,169 @@
# Please take extra care not to add rules that will make tracked files ignored.
# To test that, run `git ls-files -i --exclude-standard`.
# To check why a specific file is ignored, run `git check-ignore -v <filepath>`.
# === Rule for dotfiles ===
# Ignore all dotfiles.
.*
# Exclude specific dotfiles that we want to track.
!deps/**/.*
!.devcontainer/
!.devcontainer/.devcontainer.json
!test/fixtures/**/.*
!.clang-format
!.cpplint
!.editorconfig
!.eslintignore
!.eslintrc.js
!.eslintrc.yaml
!.gitattributes
!.github
!.gitignore
!.gitkeep
!.gitpod.yml
!.mailmap
!.nycrc
!.yamllint.yaml
# === Rules for root dir ===
/core
/vgcore.*
/v8*.log
/perf.data
/perf.data.old
/tags
/tags.*
/doc/api.xml
/node
/node_g
/gon-config.json
/*.exe
/*.swp
/out
/*.msi
/*.wixpdb
/*.qlog
# For GitHub Codespaces
/pythonenv*
# === Rules for artifacts of `./configure` ===
/icu_config.gypi
/config.gypi
/config.status
/config_fips.gypi
# === Rules for MSVS artifacts ===
Debug/
Release/
*.sln
*.suo
*.vcxproj*
UpgradeLog*.XML
_UpgradeReport_Files/
*.sdf
*.opensdf
*.VC.*
*.wixobj
/tools/msvs/genfiles/
/npm.wxs
/corepack.wxs
/tools/msvs/msi/**/Release/
/tools/msvs/msi/**/obj/
/tools/msvs/msi/**/x64/
# Exclude MSVS files used for .msi file generation
!tools/msvs/msi/**/custom_actions.vcxproj
!tools/msvs/msi/**/nodemsi.sln
# === Rules for GYP artifacts ===
*-nodegyp*
/gyp-*-tool
/test/addons/??_*/
/*.mk
# === Rules for other build artifacts ===
/email.md
/deps/v8-*
/deps/icu
/deps/icu*.zip
/deps/icu*.tgz
/deps/icu-tmp
./node_modules
/android-toolchain/
# generated by gyp on Windows
/deps/openssl/openssl.props
/deps/openssl/openssl.targets
/deps/openssl/openssl.xml
/deps/openssl/openssl-fipsmodule.props
/deps/openssl/openssl-fipsmodule.targets
/deps/openssl/openssl-fipsmodule.xml
# generated by gyp on android
/*.target.mk
/*.host.mk
/deps/openssl/openssl.target.mk
/deps/zlib/zlib.target.mk
# generated by MSVC with /P enabled
tools/*/*.i
tools/*/*.i.tmp
# === Rules for release artifacts ===
/*.tar.*
/*.pkg
/SHASUMS*.txt*
# === Rules for `node_modules` ===
!**/node_modules/**
/node_modules
/tools/doc/node_modules
/tools/clang-format/node_modules
# === Rules for test artifacts ===
/*.tap
/*.xml
/v8*-tap.json
/node_trace.*.log
# coverage related
/gcovr
/build
/coverage
# === Rules for Xcode artifacts ===
*.xcodeproj
*.xcworkspace
*.pbxproj
# === Rules for files in `/deps` ===
# Exclude all files in the vendored `npm`.
!/deps/npm/node_modules
# These are not needed and causes issues for distro packagers.
/deps/npm/node_modules/.bin/
# Respect V8's .gitignore
!deps/v8/**
# Ignore the libuv book
/deps/uv/docs/code/
/deps/uv/docs/src/guide/
# Ignore .github directories
/deps/**/.github/
# Ignore dependencies fetched by tools/v8/fetch_deps.py
/deps/.cipd
# === Rules for Windows vcbuild.bat ===
/temp-vcbuild
# === Rules for CMake ===
cmake-build-debug/
CMakeCache.txt
CMakeFiles
CTestTestfile.cmake
cmake_install.cmake
install_manifest.txt
*.cbp
# === Global Rules ===
# Keep last to avoid being excluded
*.pyc
__pycache__
.DS_Store
*~
# === Rules for C++ development ===
compile_commands.json

59
server/app.js Normal file
View file

@ -0,0 +1,59 @@
require('dotenv').config({ path: './process.env' });
const express = require("express");
const app = express();
const path = require('path');
const port = 3000;
const db = require("./db");
const poi = require("./modules/poi");
app.use(express.static(path.join(__dirname, '..', "public")));
// Crée une route spéciale pour les tiles
app.use('/tiles', express.static(path.join(__dirname, '..', 'tiles')));
// Définition de la route pour les tiles
app.get('/tiles/:z/:x/:y.png', (req, res) => {
const z = req.params.z;
const x = req.params.x;
const y = req.params.y;
const tilePath = path.join(__dirname, '..', 'tiles', `${z}/${x}/${y}.png`);
res.sendFile(tilePath);
});
app.get("/characterloc", async (req, res) => {
try {
const characterPositions = await db.getCharacterPos();
res.json(characterPositions);
} catch (err) {
console.error("Erreur lors de la récupération des positions des personnages:", err);
res.status(500).send("Erreur interne");
}
});
app.get("/npcloc", async (req, res) => {
try {
const npcPositions = await db.getNpcPos();
res.json(npcPositions);
} catch (err) {
console.error("Erreur lors de la récupération des positions des NPC:", err);
res.status(500).send("Erreur interne");
}
});
app.get("/poi/:name", async (req, res) => {
try {
const name = req.params.name;
const result = poi.initPoImarker(name);
res.json(result);
}
catch (err) {
console.error("Erreur lors de la récupération des PoI:", err);
res.status(500).send("Erreur interne");
}
});
app.listen(port, () => {
console.log(`Listening on port ${port}`);
});

27
server/data/city.json Normal file
View file

@ -0,0 +1,27 @@
[
{
"description": "City of Cragstone",
"x": 112.25,
"y": -85.625
},
{
"description": "City of Ikeras",
"x": 207,
"y": -114.5
},
{
"description": "City of Hakata",
"x": 223.625,
"y": -116.625
},
{
"description": "City of Palisade",
"x": 47.375,
"y": -132.5
},
{
"description": "City of Linvak Tukal",
"x": 87.5,
"y": -140.625
}
]

192
server/data/dungeon.json Normal file
View file

@ -0,0 +1,192 @@
[
{
"description": "Edge Beetle Mound (Dungeon, Level 1-6)",
"x": 152.875,
"y": -58.5
},
{
"description": "Wasp Hive (Dungeon, Level 5-10)",
"x": 154.75,
"y": -73.125
},
{
"description": "Vermin Nest (Dungeon, Level 1-6)",
"x": 105.5,
"y": -72.625
},
{
"description": "Haunted Cave (Dungeon, Level 5-10)",
"x": 102.25,
"y": -85.5
},
{
"description": "New Arwic Mines (Dungeon, Level 1-6)",
"x": 124.125,
"y": -69.375
},
{
"description": "The Hovel (Dungeon, Level 4-7)",
"x": 118.125,
"y": -80.625
},
{
"description": "Shreth Spawning Pit (Quest, Level 30)",
"x": 203.125,
"y": -87.625
},
{
"description": "Crumbled Sanctuary (Dungeon, Level 30-33)",
"x": 198.125,
"y": -80.875
},
{
"description": "Mist Caverns (Dungeon, Level 9-14)()",
"x": 112.375,
"y": -103.125
},
{
"description": "Old Cragstone Excavation (Level 7-15)",
"x": 118.5,
"y": -86.5
},
{
"description": "Drudge Hideout (Dungeon, Level 8-13)",
"x": 149.5,
"y": -96.625
},
{
"description": "Mad Crone Haven (Dungeon, Level 10-14)",
"x": 152.625,
"y": -88.875
},
{
"description": "Underground Drudge City (Dungeon, Level 16-23)",
"x": 152.75,
"y": -101.25
},
{
"description": "The Laboratories (Dungeon, Level 18-22)",
"x": 146.375,
"y": -103.625
},
{
"description": "Mucor Mushroom Grotto (Quest, Level 30)",
"x": 233.125,
"y": -89.5
},
{
"description": "Dank Empyrean Ruins (Dungeon, Level 33-34)",
"x": 238.625,
"y": -87.625
},
{
"description": "Olthoi Hive (Dungeon, Level 40)",
"x": 222.25,
"y": -86.625
},
{
"description": "Olthoi Hive (Dungeon, Level 40)",
"x": 225.5,
"y": -86.625
},
{
"description": "Deepdank Tunnels (Dungeon, Level 25-30)",
"x": 211.625,
"y": -97.75
},
{
"description": "Deep Darkenfowl Roosts (Quest, Level 20)()",
"x": 188.5,
"y": -118.25
},
{
"description": "Water Temple Dungeon (Dungeon, Level 16-19)",
"x": 184.5,
"y": -126.375
},
{
"description": "Inner Darkness Dungeon (Dungeon, Level 18-22)",
"x": 179.375,
"y": -136.625
},
{
"description": "Illuminated Drudge Cave (Quest, Level 18)",
"x": 148.875,
"y": -122.375
},
{
"description": "Lasher Caves (Dungeon, Level 14-18)",
"x": 133.5,
"y": -113.5
},
{
"description": "Fiery Crypt (Dungeon, Level 16-23)",
"x": 148.75,
"y": -120.375
},
{
"description": "Darkenfowl Pens (Dungeon, Level 20-25)",
"x": 191.75,
"y": -115.75
},
{
"description": "Toad Keep (Dungeon, Level 32-35)",
"x": 243.75,
"y": -118.75
},
{
"description": "The Ossuary (Dungeon, Level 42-45)",
"x": 83.625,
"y": -133.375
},
{
"description": "Omishan Armory (Quest, Level 30)",
"x": 220.5,
"y": -141
},
{
"description": "Sclavus Hierophant\u0027s Temple (Quest, Level 22)",
"x": 214.125,
"y": -116.375
},
{
"description": "Ghost Mines (Dungeon, Level 30-33)",
"x": 201,
"y": -122
},
{
"description": "Frozen Ravine (Dungeon, Level 45)",
"x": 57.75,
"y": -140.125
},
{
"description": "Crystal Caves (Dungeon, Level 35-39)",
"x": 88.375,
"y": -136.875
},
{
"description": "Linvak Massif Armory (Quest, Level 30)",
"x": 113.5,
"y": -144.625
},
{
"description": "Steam Caverns (Dungeon, Level 32-34)",
"x": 127,
"y": -154
},
{
"description": "The Banderling Delve (Dungeon, Level 38-45)",
"x": 90,
"y": -148
},
{
"description": "Golden Age Reliquary (Dungeon, Level 39-41)",
"x": 95.25,
"y": -152.75
},
{
"description": "New Mage Academy (Dungeon, Level 45)",
"x": 64.25,
"y": -178.875
}
]

97
server/data/faction.json Normal file
View file

@ -0,0 +1,97 @@
[
{
"description": "Faction Shrine -- Order of Dereth",
"x": 111.125,
"y": -86.875
},
{
"description": "Faction Shrine -- Shadow Kingdom",
"x": 111.75,
"y": -86.875
},
{
"description": "Faction Shrine -- Dominion",
"x": 111.875,
"y": -86.125
},
{
"description": "Faction Shrine -- Neutral",
"x": 111.125,
"y": -86.125
},
{
"description": "Faction Shrine and Kingdom Stone -- Order of Dereth",
"x": 143.375,
"y": -117.5
},
{
"description": "Faction Shrine and Kingdom Stone -- Shadow Kingdom",
"x": 147.5,
"y": -116
},
{
"description": "Faction Shrine and Kingdom Stone -- Dominion",
"x": 151.5,
"y": -117.5
},
{
"description": "Faction Shrine -- Order of Dereth",
"x": 206.5,
"y": -114.75
},
{
"description": "Faction Shrine -- Shadow Kingdom",
"x": 206.875,
"y": -113.75
},
{
"description": "Faction Shrine -- Dominion",
"x": 207.75,
"y": -115.375
},
{
"description": "Faction Shrine -- Neutral",
"x": 207.125,
"y": -115.625
},
{
"description": "Faction Shrine -- Order of Dereth",
"x": 223.875,
"y": -115.125
},
{
"description": "Faction Shrine -- Shadow Kingdom",
"x": 224.875,
"y": -116.75
},
{
"description": "Faction Shrine -- Dominion",
"x": 223.875,
"y": -117
},
{
"description": "Faction Shrine -- Neutral",
"x": 224.875,
"y": -116.25
},
{
"description": "Faction Shrine -- Order of Dereth",
"x": 85.125,
"y": -140.25
},
{
"description": "Faction Shrine -- Shadow Kingdom",
"x": 85,
"y": -139.25
},
{
"description": "Faction Shrine -- Dominion",
"x": 85.25,
"y": -141.625
},
{
"description": "Faction Shrine -- Neutral",
"x": 85.125,
"y": -140.875
}
]

182
server/data/gateways.json Normal file
View file

@ -0,0 +1,182 @@
[
{
"description": "Gateways: Arwic, Millstone, Cragstone",
"x": 142.125,
"y": -73.125
},
{
"description": "Gateways: Arwic, Kehan, Cragstone",
"x": 102,
"y": -79.875
},
{
"description": "Gateways: Kehan, Millstone, Cragstone",
"x": 118.625,
"y": -70.75
},
{
"description": "Gateways: Ankoro, Ikeras",
"x": 198.625,
"y": -93.125
},
{
"description": "Gateways: Millstone, Kehan, Arwic, Molwirth, Rithwic",
"x": 111.5,
"y": -86.5
},
{
"description": "Gateways: Cragstone, Shoushi",
"x": 127.75,
"y": -109.75
},
{
"description": "Gateways: Cavendo, Cragstone",
"x": 133.375,
"y": -97.25
},
{
"description": "Gateways: Rithwic, Shoushi",
"x": 163.875,
"y": -107
},
{
"description": "Gateway: Omishan",
"x": 164.625,
"y": -106.875
},
{
"description": "Gateways: Rakani, Hakata",
"x": 220.625,
"y": -91.625
},
{
"description": "Gateways: Shinoko, Ikeras",
"x": 222.625,
"y": -105.625
},
{
"description": "Gateways: Shinoko, Ikeras",
"x": 184.25,
"y": -133.25
},
{
"description": "Gateways: Shoushi, Cavendo",
"x": 166.875,
"y": -116.125
},
{
"description": "Gateways: Cavendo and Molwirth",
"x": 155.625,
"y": -113.25
},
{
"description": "Gateway: Kydi",
"x": 158.375,
"y": -117.25
},
{
"description": "Gateway from Prosper Free-For-All Area to Shoushi",
"x": 126.25,
"y": -124.375
},
{
"description": "Gateway to Prosper Free-For-All Area",
"x": 127.875,
"y": -122.5
},
{
"description": "Gateways: Rakani, Hakata",
"x": 205.375,
"y": -114.25
},
{
"description": "Gateways: Zu, Mayoi",
"x": 204.25,
"y": -115.375
},
{
"description": "Gateways: Ankoro, Ikeras",
"x": 224.75,
"y": -115.5
},
{
"description": "Gateway: Rings of Oriad",
"x": 245.875,
"y": -105.625
},
{
"description": "Gateways: Palisade, Linvak Tukal",
"x": 70.25,
"y": -134.875
},
{
"description": "Gateways: Mayoi, Zu",
"x": 214.375,
"y": -133.375
},
{
"description": "Gateways: Arhovas, Gurokora",
"x": 50.5,
"y": -132.75
},
{
"description": "Gateways: Keidelur, Whitebay",
"x": 89.5,
"y": -140.5
},
{
"description": "Gateways: Arhovas, Ondekodo",
"x": 87.5,
"y": -138.625
},
{
"description": "Gateways: Keidelur, Linvak Tukal",
"x": 121.375,
"y": -154
},
{
"description": "Gateway: Vesayan Isles",
"x": 132.375,
"y": -143.5
},
{
"description": "Gateways: Gurokora, Linvak Tukal",
"x": 87.375,
"y": -151.875
},
{
"description": "Gateways: Whitebay, Linvak Tukal",
"x": 109.5,
"y": -151.125
},
{
"description": "Gateways: Ondekodo, Palisade",
"x": 78.5,
"y": -163.25
},
{
"description": "Gateways to Arramora",
"x": 64.625,
"y": -111.75
},
{
"description": "Gateway: Linvak Massif",
"x": 65,
"y": -112.25
},
{
"description": "Southern Arramora Gateway",
"x": 75.5,
"y": -101.75
},
{
"description": "Southern Arramora Gateway",
"x": 66.25,
"y": -95.375
},
{
"description": "Southern Arramora Gateway",
"x": 55.75,
"y": -106.5
}
]

297
server/data/outpost.json Normal file
View file

@ -0,0 +1,297 @@
[
{
"description": "Northwest Lost Wish Outpost",
"x": 140.125,
"y": -59.875
},
{
"description": "Northeast Lost Wish Outpost",
"x": 151.625,
"y": -59.125
},
{
"description": "Southeast Lost Wish Outpost",
"x": 154.875,
"y": -67.125
},
{
"description": "Northwest Esper Outpost",
"x": 94.625,
"y": -74.5
},
{
"description": "Northeast Esper Outpost",
"x": 109.375,
"y": -69.375
},
{
"description": "Southwest Esper Outpost",
"x": 95.5,
"y": -89.375
},
{
"description": "Northern Arwic Outpost",
"x": 128.75,
"y": -67
},
{
"description": "Eastern Arwic Outpost",
"x": 138.5,
"y": -74.375
},
{
"description": "Southern Arwic Outpost",
"x": 124.5,
"y": -84.25
},
{
"description": "Northwest Naderu Outpost",
"x": 194.375,
"y": -80.75
},
{
"description": "Northeast Naderu Outpost",
"x": 210.25,
"y": -82.875
},
{
"description": "Southeast Naderu Outpost",
"x": 206.625,
"y": -89.625
},
{
"description": "Northern Cobalt Outpost",
"x": 117.375,
"y": -97.5
},
{
"description": "Western Cobalt Outpost",
"x": 108.5,
"y": -102.625
},
{
"description": "Northwest Mad Crone Outpost",
"x": 137.25,
"y": -89.25
},
{
"description": "Northeast Mad Crone Outpost",
"x": 154,
"y": -90.875
},
{
"description": "Southeast Mad Crone Outpost",
"x": 157.75,
"y": -96.125
},
{
"description": "Northeast Drudge Citadel Outpost",
"x": 165.5,
"y": -88.625
},
{
"description": "Southwest Drudge Citadel Outpost",
"x": 144.625,
"y": -109.625
},
{
"description": "Northeast Farali Outpost",
"x": 243.25,
"y": -87.625
},
{
"description": "Southeast Farali Outpost",
"x": 237.625,
"y": -103.5
},
{
"description": "Central Farali Outpost",
"x": 226.375,
"y": -92.625
},
{
"description": "Northwest Tou-Tou Outpost",
"x": 203.625,
"y": -97.75
},
{
"description": "Northeast Tou-Tou Outpost",
"x": 213.375,
"y": -92.875
},
{
"description": "Southern Tou-Tou Outpost",
"x": 211.375,
"y": -114.75
},
{
"description": "Northern Kydi Outpost",
"x": 181.25,
"y": -110.625
},
{
"description": "Eastern Kydi Outpost",
"x": 183.375,
"y": -118.625
},
{
"description": "Western Kydi Outpost",
"x": 170.125,
"y": -117.875
},
{
"description": "Southern Prosper Outpost",
"x": 139.5,
"y": -128.625
},
{
"description": "Eastern Prosper Outpost",
"x": 152.625,
"y": -127.375
},
{
"description": "Western Prosper Outpost",
"x": 127.5,
"y": -117.625
},
{
"description": "Western Ariaki Outpost",
"x": 191.375,
"y": -110.875
},
{
"description": "Northwest Ariaki Outpost",
"x": 189.375,
"y": -105.75
},
{
"description": "Northeast Ariaki Outpost",
"x": 203.625,
"y": -103.75
},
{
"description": "Northern Vesayan Outpost",
"x": 235.125,
"y": -110.875
},
{
"description": "Eastern Vesayan Outpost",
"x": 245.5,
"y": -113.75
},
{
"description": "Central Winterhollows Outpost",
"x": 81.375,
"y": -135.5
},
{
"description": "Northern Winterhollows Outpost",
"x": 78.5,
"y": -126.625
},
{
"description": "Northeast Winterhollows Outpost",
"x": 89.375,
"y": -128.5
},
{
"description": "Northwest Lumari Outpost",
"x": 198.5,
"y": -128.5
},
{
"description": "Northern Lumari Outpost",
"x": 209.5,
"y": -122.625
},
{
"description": "Southeast Lumari Outpost",
"x": 223.5,
"y": -127.375
},
{
"description": "Southern Gevoth Outpost",
"x": 58.5,
"y": -156.625
},
{
"description": "Eastern Gevoth Outpost",
"x": 60.375,
"y": -138.75
},
{
"description": "Western Gevoth Outpost",
"x": 46.375,
"y": -140.5
},
{
"description": "Northern Thusik Outpost",
"x": 99.625,
"y": -132.875
},
{
"description": "Eastern Thusik Outpost",
"x": 103.25,
"y": -139.75
},
{
"description": "Drudgerton",
"x": 100.625,
"y": -143.75
},
{
"description": "Northern Oriad Outpost",
"x": 117.375,
"y": -142.75
},
{
"description": "Eastern Oriad Outpost",
"x": 128.375,
"y": -144.5
},
{
"description": "Western Oriad Outpost",
"x": 117.125,
"y": -150.75
},
{
"description": "Southwest Nepeth Outpost",
"x": 80.5,
"y": -159.375
},
{
"description": "Northwest Nepeth Outpost",
"x": 78.375,
"y": -144.625
},
{
"description": "Northeast Nepeth Outpost",
"x": 86.375,
"y": -147.5
},
{
"description": "Central Stoneshadow Outpost",
"x": 99.375,
"y": -155.5
},
{
"description": "Northwest Stoneshadow Outpost",
"x": 95.5,
"y": -149.75
},
{
"description": "Southwest Stoneshadow Outpost",
"x": 92.375,
"y": -162.375
},
{
"description": "Eastern Malthabbor Outpost",
"x": 78.125,
"y": -168.5
},
{
"description": "Jethric\u0027s Outpost",
"x": 193.75,
"y": -168.25
}
]

502
server/data/poi.json Normal file
View file

@ -0,0 +1,502 @@
[
{
"description": "Drudge Windmill (Point of Interest)",
"x": 142.125,
"y": -67.625
},
{
"description": "Armoredillo Ancestor Head (Quest, Level 3)",
"x": 144,
"y": -73.75
},
{
"description": "Empyrean Head Circle (Point of Interest)",
"x": 146.625,
"y": -68.875
},
{
"description": "Obsidian Span (Point of Interest)",
"x": 112.75,
"y": -72
},
{
"description": "Armoredillo Ancestor Head (Quest, Level 3)",
"x": 110.125,
"y": -75.625
},
{
"description": "Drudge Outcast Camp (Point of Interest)",
"x": 103.75,
"y": -84.875
},
{
"description": "Armoredillo Ancestor Head (Quest, Level 3)",
"x": 117.375,
"y": -71.875
},
{
"description": "Deru Tree (Quest, Level 25)",
"x": 197.75,
"y": -91.625
},
{
"description": "Shrine of the Leaf (Point of Interest)",
"x": 192.875,
"y": -84.125
},
{
"description": "Shrine of the Root (Point of Interest)",
"x": 204.875,
"y": -79.375
},
{
"description": "Shrine of the Limb (Point of Interest)",
"x": 215.75,
"y": -84.375
},
{
"description": "Crater Tunnel (Point of Interest)",
"x": 217.875,
"y": -82.5
},
{
"description": "Ruins of Old Cragstone (Point of Interest)",
"x": 120.375,
"y": -88.625
},
{
"description": "The Sundermont (Point of Interest)",
"x": 120.5,
"y": -102.875
},
{
"description": "Mist Shrine (Quest, Level 7)",
"x": 128.5,
"y": -109.625
},
{
"description": "Drudge Slinker Bandit Camp (Quest, Level 10)",
"x": 125.25,
"y": -107.75
},
{
"description": "Mad Crone Mountains (Point of Interest)",
"x": 154.25,
"y": -92.5
},
{
"description": "Cauldron of Tanacha (Quest, Level 5)",
"x": 132.5,
"y": -91.625
},
{
"description": "Drudge Island Fort (Point of Interest)",
"x": 160.125,
"y": -94.25
},
{
"description": "Six Falls (Point of Interest)",
"x": 139.75,
"y": -86.625
},
{
"description": "Isle of Tears Drudge Fort",
"x": 128.25,
"y": -93.625
},
{
"description": "City of Artefon()",
"x": 137.125,
"y": -102.75
},
{
"description": "Ribcage Citadel (Point of Interest)",
"x": 155,
"y": -103.75
},
{
"description": "Rashan Twoblades (Quest, Level 10)",
"x": 157.625,
"y": -108
},
{
"description": "Idol of Might (Point of Interest)",
"x": 150.375,
"y": -107.875
},
{
"description": "Idol of Speed (Point of Interest)",
"x": 148.625,
"y": -107.625
},
{
"description": "Idol of Fortitude (Point of Interest)",
"x": 153,
"y": -107.875
},
{
"description": "Warder Hideout (Quest, Level 15)",
"x": 145.375,
"y": -101.25
},
{
"description": "Drudge Fort (Quest, Level 15)",
"x": 154.375,
"y": -102.625
},
{
"description": "The Choker (Point of Interest)",
"x": 232.375,
"y": -97.375
},
{
"description": "Ancestor Head (Quest, Level 30)",
"x": 243.75,
"y": -88.625
},
{
"description": "Tou-Tou Lighthouse (Point of Interest)",
"x": 222.375,
"y": -104.75
},
{
"description": "Ruins of Hebian-to (Point of Interest)",
"x": 216.125,
"y": -110.25
},
{
"description": "Tou-Tou Bathhouse (Point of Interest)",
"x": 220.625,
"y": -108.375
},
{
"description": "Burun village of Blackmire (Point of Interest)",
"x": 207.125,
"y": -101.875
},
{
"description": "Fort Aimaru",
"x": 215.5,
"y": -107.375
},
{
"description": "Ruins of Lin (Point of Interest)",
"x": 214.625,
"y": -112.625
},
{
"description": "Ruins of Baishi (Point of Interest)",
"x": 212.25,
"y": -109.875
},
{
"description": "Aulatah Colossus (Point of Interest)",
"x": 177.5,
"y": -115.25
},
{
"description": "Hinu's Mimbu Village (Point of Interest)",
"x": 177.5,
"y": -107.5
},
{
"description": "Island Mimbu Village (Point of Interest)",
"x": 179.5,
"y": -104.875
},
{
"description": "Sclavus Fortress (Point of Interest)",
"x": 189,
"y": -121
},
{
"description": "Haunted Mission Ruins",
"x": 181,
"y": -132
},
{
"description": "Ruins of Nanto (Point of Interest)",
"x": 186,
"y": -128
},
{
"description": "Shoyanen's Tower (Point of Interest)",
"x": 190.375,
"y": -134.875
},
{
"description": "Ruined Fort (Point of Interest)",
"x": 179,
"y": -140
},
{
"description": "Mimbu Village (Point of Interest)",
"x": 178,
"y": -128
},
{
"description": "Blue Ghost Falls (Point of Interest)",
"x": 185.625,
"y": -127.75
},
{
"description": "The Dam (Point of Interest)",
"x": 143.25,
"y": -111.625
},
{
"description": "Spirit of Artefun",
"x": 143,
"y": -111.875
},
{
"description": "New Drudge Republic Counselors (Quest, Level 13)",
"x": 151,
"y": -127
},
{
"description": "Tamar Realian (Quest, Level 15)",
"x": 135.375,
"y": -119.875
},
{
"description": "Osteth Weapons Golem (Quest, Level 15)",
"x": 138.25,
"y": -120
},
{
"description": "Empyrean Bridge (Point of Interest)",
"x": 154,
"y": -126
},
{
"description": "King Toad Idol (Point of Interest)",
"x": 150.375,
"y": -124.375
},
{
"description": "The Head of Alkandar (Point of Interest)",
"x": 191.375,
"y": -101.625
},
{
"description": "Totem of Vakentu (Quest, Level 20)",
"x": 206.5,
"y": -115.625
},
{
"description": "Ithaenc Cathedral (Point of Interest)",
"x": 239.25,
"y": -138.25
},
{
"description": "Four Falls Overlook (Point of Interest)",
"x": 240.5,
"y": -136
},
{
"description": "The Icefall (Point of Interest)",
"x": 73.375,
"y": -138.625
},
{
"description": "The Frostbound One (Quest, Level 42)",
"x": 79.25,
"y": -131.375
},
{
"description": "Portal to Icefire Gorge",
"x": 79.125,
"y": -131.25
},
{
"description": "Unaro's Burial Mound (Quest, Level 25)",
"x": 212.875,
"y": -118.875
},
{
"description": "Shi Sumakhe (Quest, Level 30)",
"x": 220.25,
"y": -130.375
},
{
"description": "Aste Sclavus Temple (Quest, Level 22)",
"x": 197.5,
"y": -113.375
},
{
"description": "Essa Sclavus Temple (Quest, Level 22)",
"x": 201.625,
"y": -119.25
},
{
"description": "Ulu Sclavus Temple (Quest, Level 22)",
"x": 226.375,
"y": -130.5
},
{
"description": "Dereth Rally (Quest, Level 15)",
"x": 210.125,
"y": -121.875
},
{
"description": "Gates of Gevoth (Point of Interest)",
"x": 53.5,
"y": -143.75
},
{
"description": "The Silent City (Point of Interest)()",
"x": 97.375,
"y": -137.75
},
{
"description": "Altar of Justice (Point of Interest)",
"x": 100.125,
"y": -128.75
},
{
"description": "Altar of Turmoil (Point of Interest)",
"x": 109.75,
"y": -136.75
},
{
"description": "Altar of Order (Point of Interest)",
"x": 106.875,
"y": -145.25
},
{
"description": "Altar of the Ancients (Quest, Level 35)",
"x": 94.75,
"y": -135.625
},
{
"description": "Mistcurl Vale (Point of Interest)",
"x": 128,
"y": -156.5
},
{
"description": "Eli Spinekeeper Camp (Quest, Level 28)",
"x": 123.375,
"y": -146.5
},
{
"description": "Malga Dresovan (Quest, Level 40)",
"x": 121.125,
"y": -147.625
},
{
"description": "Yokketh Bell Tower (Point of Interest)",
"x": 84.5,
"y": -149.25
},
{
"description": "Lodrog's Watchtower (Quest, Level 38)",
"x": 86.75,
"y": -155.875
},
{
"description": "The Water Walk (Point of Interest)",
"x": 79.375,
"y": -160.5
},
{
"description": "Resolution Point (Point of Interest)",
"x": 68.375,
"y": -146.125
},
{
"description": "The Colussus (Point of Interest)",
"x": 92.5,
"y": -146.75
},
{
"description": "Ruined Temple (Point of Interest)",
"x": 97,
"y": -153.875
},
{
"description": "Fortress Goarata (Point of Interest)",
"x": 70.5,
"y": -174
},
{
"description": "Ancestor Head (Quest, Level 45)",
"x": 64.125,
"y": -179.375
},
{
"description": "The End of the Road (Point of Interest)",
"x": 76.625,
"y": -170.375
},
{
"description": "Star Beacon",
"x": 64.875,
"y": -112.125
},
{
"description": "Abandoned Gromnatross Nest",
"x": 178,
"y": -164
},
{
"description": "Atlan's Foundry",
"x": 206.75,
"y": -169.875
},
{
"description": "Pyreal Mines",
"x": 202.5,
"y": -164.75
},
{
"description": "Realadain Estate",
"x": 202.5,
"y": -202.125
},
{
"description": "Fort Strathelar",
"x": 177.5,
"y": -193.625
},
{
"description": "Shield Wall Gate",
"x": 174.5,
"y": -195.875
},
{
"description": "Stalwart's Tower",
"x": 185.625,
"y": -195.75
},
{
"description": "Knorr Lyceum",
"x": 158.125,
"y": -217.375
},
{
"description": "Tower of Wrath",
"x": 179,
"y": -209.75
},
{
"description": "Knorr Lyceum Dock",
"x": 152,
"y": -216.875
},
{
"description": "Knorr Dormitories",
"x": 152,
"y": -216.875
},
{
"description": "Observatory",
"x": 152.75,
"y": -206.5
},
{
"description": "Tibri Outpost",
"x": 171.5,
"y": -201.5
}
]

422
server/data/ringways.json Normal file
View file

@ -0,0 +1,422 @@
[
{
"description": "Ringway to northwest Lost Wish",
"x": 141.875,
"y": -71.125
},
{
"description": "Ringway to northeast Lost Wish",
"x": 140.125,
"y": -59.75
},
{
"description": "Ringway to southeast Lost Wish",
"x": 142.125,
"y": -72.625
},
{
"description": "Ringway to southwest Lost Wish",
"x": 154.625,
"y": -67.25
},
{
"description": "Ringway to northwest Esper",
"x": 108.875,
"y": -70
},
{
"description": "Ringway to northeast Esper",
"x": 102.125,
"y": -79.25
},
{
"description": "Ringway to town of Millstone",
"x": 95.875,
"y": -89.5
},
{
"description": "Ringway to southwest Esper",
"x": 94.5,
"y": -75
},
{
"description": "Ringway to northern Arwic Outland",
"x": 118.625,
"y": -70.125
},
{
"description": "Ringway to eastern Arwic Outland",
"x": 127.375,
"y": -67.75
},
{
"description": "Ringway to town of Arwic",
"x": 125,
"y": -83.75
},
{
"description": "Ringway to southern Arwic Outland",
"x": 138.375,
"y": -74
},
{
"description": "Ringway to town of Rakani",
"x": 207.625,
"y": -89.375
},
{
"description": "Ringway to northwest Naderu",
"x": 199.125,
"y": -93.125
},
{
"description": "Ringway to northeast Naderu",
"x": 194,
"y": -82
},
{
"description": "Ringway to southeast Naderu",
"x": 209,
"y": -82.875
},
{
"description": "Ringway to western Cobalt Sweeps",
"x": 118.875,
"y": -99
},
{
"description": "Ringway to northern Cobalt Sweeps",
"x": 128.375,
"y": -110
},
{
"description": "Ringway to town of Molwirth",
"x": 108,
"y": -103.125
},
{
"description": "Ringway to northwest Mad Crone Mountains",
"x": 133,
"y": -97.125
},
{
"description": "Ringway to northeast Mad Crone Mountains",
"x": 136.25,
"y": -89.375
},
{
"description": "Ringway to southeast Mad Crone Mountains",
"x": 153.625,
"y": -91.625
},
{
"description": "Ringway to town of Rithwic",
"x": 156.5,
"y": -95.75
},
{
"description": "Ringway to northwest Drudge Citadel",
"x": 144.375,
"y": -108.75
},
{
"description": "Ringway to northeast Drudge Citadel",
"x": 142.875,
"y": -101.25
},
{
"description": "Ringway to town of Cavendo",
"x": 165.625,
"y": -89.5
},
{
"description": "Ringway to southwest Drudge Citadel",
"x": 163,
"y": -107
},
{
"description": "Ringway to town of Ankoro",
"x": 238.875,
"y": -102.875
},
{
"description": "Ringway to northeast Farali",
"x": 226,
"y": -93.75
},
{
"description": "Ringway to southeast Farali",
"x": 242.125,
"y": -87.625
},
{
"description": "Ringway to central Farali",
"x": 218.875,
"y": -89.625
},
{
"description": "Ringway to town of Zu",
"x": 214.25,
"y": -93
},
{
"description": "Ringway to northwest Tou-Tou",
"x": 211.625,
"y": -113.25
},
{
"description": "Ringway to northeast Tou-Tou",
"x": 203.125,
"y": -98.25
},
{
"description": "Ringway to southern Tou-Tou",
"x": 222.125,
"y": -105.375
},
{
"description": "Ringway to western Kydi",
"x": 184.125,
"y": -133.875
},
{
"description": "Ringway to northern Kydi",
"x": 170.5,
"y": -117.625
},
{
"description": "Ringway to eastern Kydi",
"x": 181.625,
"y": -110.25
},
{
"description": "Ringway to southern Kydi",
"x": 183.75,
"y": -118.875
},
{
"description": "Ringway to western Prosper",
"x": 154.125,
"y": -113.25
},
{
"description": "Ringway to southern Prosper",
"x": 127.125,
"y": -117
},
{
"description": "Ringway to eastern Prosper",
"x": 139.625,
"y": -127.5
},
{
"description": "Ringway to city of Shoushi",
"x": 153.25,
"y": -126.5
},
{
"description": "Ringway to northwest Ariaki",
"x": 203.375,
"y": -103.5
},
{
"description": "Ringway to northeast Ariaki",
"x": 205.5,
"y": -115.375
},
{
"description": "Ringway to western Ariaki",
"x": 188.5,
"y": -105.375
},
{
"description": "Ringway to city of Ikeras",
"x": 191.375,
"y": -111.75
},
{
"description": "Ringway to city of Hakata",
"x": 239.875,
"y": -138.625
},
{
"description": "Ringway to northern Vesayan",
"x": 224.75,
"y": -114.375
},
{
"description": "Ringway to eastern Vesayan",
"x": 235.25,
"y": -111.75
},
{
"description": "Ringway to Vesayan Sanctuary",
"x": 245.5,
"y": -112.25
},
{
"description": "Ringway to northern Winterhollows",
"x": 82.125,
"y": -135.75
},
{
"description": "Ringway to northeast Winterhollows",
"x": 78.625,
"y": -127.125
},
{
"description": "Ringway to central Winterhollows",
"x": 70.5,
"y": -134.125
},
{
"description": "Ringway to town of Arhovas",
"x": 89.625,
"y": -128.875
},
{
"description": "Ringway to northwest Lumari",
"x": 209,
"y": -123
},
{
"description": "Ringway to northern Lumari",
"x": 223.125,
"y": -127.875
},
{
"description": "Ringway to town of Shinoko",
"x": 198.625,
"y": -129
},
{
"description": "Ringway to southeast Lumari",
"x": 214.625,
"y": -133.625
},
{
"description": "Ringway to western Gevoth",
"x": 58,
"y": -156.75
},
{
"description": "Ringway to southern Gevoth",
"x": 48.375,
"y": -135
},
{
"description": "Ringway to eastern Gevoth",
"x": 46.75,
"y": -140.875
},
{
"description": "Ringway to city of Palisade",
"x": 60.375,
"y": -139.625
},
{
"description": "Ringway to city of Linvak Tukal",
"x": 103.75,
"y": -140.75
},
{
"description": "Ringway to northern Thusik",
"x": 90,
"y": -139.25
},
{
"description": "Ringway to eastern Thusik",
"x": 100.125,
"y": -144.25
},
{
"description": "Ringway to southern Thusik",
"x": 99.75,
"y": -133.25
},
{
"description": "Ringway to northern Oriad",
"x": 121.75,
"y": -153.875
},
{
"description": "Ringway to eastern Oriad",
"x": 116.625,
"y": -150.375
},
{
"description": "Ringway to town of Whitebay",
"x": 128.875,
"y": -144.5
},
{
"description": "Ringway to western Oriad",
"x": 117.375,
"y": -143.375
},
{
"description": "Ringway to southwest Nepeth",
"x": 78.125,
"y": -145.25
},
{
"description": "Ringway to northeast Nepeth",
"x": 80.125,
"y": -159.625
},
{
"description": "Ringway to northwest Nepeth",
"x": 87.75,
"y": -151.625
},
{
"description": "Ringway to town of Ondekodo",
"x": 87.375,
"y": -147.375
},
{
"description": "Ringway to town of Keidelur",
"x": 94.25,
"y": -149.375
},
{
"description": "Ringway to central Stoneshadow()",
"x": 109.125,
"y": -151.5
},
{
"description": "Ringway to southwest Stoneshadow",
"x": 99.75,
"y": -155.375
},
{
"description": "Ringway to northwest Stoneshadow",
"x": 92.5,
"y": -161.625
},
{
"description": "Ringway to northwest Malthabbor",
"x": 78.75,
"y": -163.125
},
{
"description": "Ringway to southeast Plateau",
"x": 77.75,
"y": -168.625
},
{
"description": "Ringway to southeast Malthabbor",
"x": 72.625,
"y": -177.125
},
{
"description": "Ringway to eastern Malthabbor",
"x": 69.25,
"y": -168.25
},
{
"description": "Ringway to town of Gurokora",
"x": 66,
"y": -179.375
}
]

112
server/data/town.json Normal file
View file

@ -0,0 +1,112 @@
[
{
"description": "Town of Kehan",
"x": 141.875,
"y": -73.625
},
{
"description": "Town of Millstone",
"x": 102.375,
"y": -79.625
},
{
"description": "Town of Arwic",
"x": 119.625,
"y": -71.75
},
{
"description": "Town of Rakani",
"x": 198.5,
"y": -91.625
},
{
"description": "Town of Molwirth",
"x": 128.375,
"y": -109.5
},
{
"description": "Town of Rithwic",
"x": 132,
"y": -97
},
{
"description": "Town of Cavendo",
"x": 164.25,
"y": -106.75
},
{
"description": "Town of Ankoro",
"x": 219.125,
"y": -90.5
},
{
"description": "Town of Zu",
"x": 221.375,
"y": -106.875
},
{
"description": "Town of Mayoi",
"x": 185,
"y": -134
},
{
"description": "City of Shoushi",
"x": 155.5,
"y": -115.375
},
{
"description": "Town of Arhovas",
"x": 70.375,
"y": -133.625
},
{
"description": "Town of Shinoko",
"x": 216,
"y": -133.25
},
{
"description": "Town of Whitebay",
"x": 121.625,
"y": -154.5
},
{
"description": "Town of Ondekodo",
"x": 87.625,
"y": -152.625
},
{
"description": "Town of Keidelur",
"x": 109.125,
"y": -150.625
},
{
"description": "Town of Gurokora",
"x": 77.75,
"y": -163.5
},
{
"description": "Caerlin Skyport",
"x": 172,
"y": -167
},
{
"description": "Yaosenji",
"x": 173.25,
"y": -172.5
},
{
"description": "Vothardun",
"x": 202.125,
"y": -170.125
},
{
"description": "Greenstone",
"x": 191.75,
"y": -191.625
},
{
"description": "The Aerie",
"x": 185.375,
"y": -176.875
}
]

107
server/data/vault.json Normal file
View file

@ -0,0 +1,107 @@
[
{
"description": "Lost Wish Vault (Vault Campaign, Level 6)",
"x": 156.25,
"y": -64.75
},
{
"description": "Esper Vault (Vault Campaign, Level 6)",
"x": 98.625,
"y": -93.625
},
{
"description": "Arwic Vault (Vault Campaign, Level 6)",
"x": 133,
"y": -82.5
},
{
"description": "Naderu Vault (Vault Campaign, Level 30)",
"x": 205.375,
"y": -92.625
},
{
"description": "Cobalt Vault (Vault Campaign, Level 12)",
"x": 119.75,
"y": -109.875
},
{
"description": "Mad Crone Vault (Vault Campaign, Level 12)",
"x": 149.5,
"y": -91.5
},
{
"description": "Drudge Citadel Vault (Vault Campaign, Level 19)",
"x": 156.875,
"y": -104.25
},
{
"description": "Farali Vault (Vault Campaign, Level 34)",
"x": 222,
"y": -94
},
{
"description": "Tou-Tou Vault (Vault Campaign, Level 30)",
"x": 209.25,
"y": -107.25
},
{
"description": "Kydi Vault (Vault Campaign, Level 19)",
"x": 174.5,
"y": -106.875
},
{
"description": "Prosper Vault (Vault Campaign, Level 21)",
"x": 142.625,
"y": -125.5
},
{
"description": "Ariaki Vault (Vault Campaign, Level 24)",
"x": 196.625,
"y": -105.625
},
{
"description": "Vesayan Vault (Vault Campaign, Level 35)",
"x": 240,
"y": -138
},
{
"description": "Winterhollows Vault (Vault Campaign, Level 46)",
"x": 81.25,
"y": -133.5
},
{
"description": "Lumari Vault (Vault Campaign, Level 27)",
"x": 206.375,
"y": -122.5
},
{
"description": "Gevoth Vault (Vault Campaign, Level 48)",
"x": 62.5,
"y": -148.25
},
{
"description": "Thusik Vault (Vault Campaign, Level 46)",
"x": 93.5,
"y": -143.75
},
{
"description": "Oriad Vault (Vault Campaign, Leve 42)",
"x": 118,
"y": -149
},
{
"description": "Nepeth Vault (Vault Campaign, Level 45)",
"x": 81.5,
"y": -143.75
},
{
"description": "Stoneshadow Vault (Vault Campaign, Level 44)",
"x": 100.5,
"y": -160.5
},
{
"description": "Malthabbor Vault (Vault Campaign, Level 47)",
"x": 75.5,
"y": -166.375
}
]

101
server/db.js Normal file
View file

@ -0,0 +1,101 @@
const mysql = require("mysql2");
const utilsMath = require("./utils/utilsMath.js");
const dbConfig = {
host: "localhost",
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: "ac2re_world",
};
const con = mysql.createConnection(dbConfig);
con.connect((err) => {
if (err) {
console.error("Erreur de connexion à la base de données:", err);
process.exit(1);
}
console.log("Connected to Mysql");
});
//Get player position in Database
async function getCharacterPos() {
try {
const [result, fields] = await con.promise().query(`
SELECT woss.literalValue, wosp.landblockId, wosp.posX, wosp.posY
FROM characters c
INNER JOIN world_obj_stat_poss wosp ON c.objectId = wosp.objectId
INNER JOIN world_obj_stat_strinfo woss ON c.objectId = woss.objectId
`);
// Tableau pour stocker les données converties
let characterPositions = [];
// Manipuler les données résultantes
for (let row of result) {
// Convertir les coordonnées de jeu en coordonnées Leaflet
let leafletLoc = utilsMath.convertInGameLoctoLeafletLoc(
row.landblockId,
row.posX,
row.posY
);
// Ajouter les données converties au tableau
characterPositions.push({
literalValue: row.literalValue,
locx: leafletLoc.locx,
locy: leafletLoc.locy,
});
}
return characterPositions;
} catch (err) {
console.error(
"Erreur lors de la récupération des positions des personnages:",
err
);
return [];
}
}
//Get npc position in Database
async function getNpcPos() {
try {
const [result, fields] = await con.promise().query(`
SELECT entityDid, landblockId, posX, posY, objectName
FROM ac2re_map.map_npc;
`);
// Tableau pour stocker les données converties
let npcPosition = [];
// Manipuler les données résultantes
for (let row of result) {
// Convertir les coordonnées de jeu en coordonnées Leaflet
let leafletLoc = utilsMath.convertInGameLoctoLeafletLoc(
row.landblockId,
row.posX,
row.posY
);
// Ajouter les données converties au tableau
npcPosition.push({
entityid: row.entityDid,
literalValue: row.objectName,
locx: leafletLoc.locx,
locy: leafletLoc.locy,
});
}
return npcPosition;
} catch (err) {
console.error(
"Erreur lors de la récupération des positions des NPC:",
err
);
return [];
}
}
module.exports = { getCharacterPos, getNpcPos };

10
server/jsconfig.json Normal file
View file

@ -0,0 +1,10 @@
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES6"
},
"exclude": [
"node_modules",
"**/node_modules/*"
]
}

10
server/modules/poi.js Normal file
View file

@ -0,0 +1,10 @@
const path = require('path');
const fs = require('fs');
function initPoImarker(name) {
let jsonName = path.join(__dirname, '..', 'data', `${name}.json`);
const result = JSON.parse(fs.readFileSync(jsonName));
return result;
}
module.exports = { initPoImarker };

802
server/package-lock.json generated Normal file
View file

@ -0,0 +1,802 @@
{
"name": "server",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "server",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"dotenv": "^16.4.5",
"express": "^4.19.2",
"mysql2": "^3.9.7"
}
},
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"dependencies": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
"node_modules/body-parser": {
"version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
"integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.11.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
},
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/call-bind": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"set-function-length": "^1.2.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dependencies": {
"safe-buffer": "5.2.1"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/content-type": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/cookie": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
},
"node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/denque": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
"integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
"engines": {
"node": ">=0.10"
}
},
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/destroy": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/dotenv": {
"version": "16.4.5",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/es-define-property": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
"dependencies": {
"get-intrinsic": "^1.2.4"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-errors": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
"node_modules/etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/express": {
"version": "4.19.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
"integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.2",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.6.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.2.0",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"merge-descriptors": "1.0.1",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.7",
"qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
"serve-static": "1.15.0",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
"engines": {
"node": ">= 0.10.0"
}
},
"node_modules/finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/forwarded": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/generate-function": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
"integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
"dependencies": {
"is-property": "^1.0.2"
}
},
"node_modules/get-intrinsic": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
"hasown": "^2.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gopd": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
"dependencies": {
"get-intrinsic": "^1.1.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dependencies": {
"es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dependencies": {
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/http-errors": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="
},
"node_modules/long": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
"integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
},
"node_modules/lru-cache": {
"version": "8.0.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz",
"integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==",
"engines": {
"node": ">=16.14"
}
},
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
},
"node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"bin": {
"mime": "cli.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/mysql2": {
"version": "3.9.7",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.7.tgz",
"integrity": "sha512-KnJT8vYRcNAZv73uf9zpXqNbvBG7DJrs+1nACsjZP1HMJ1TgXEy8wnNilXAn/5i57JizXKtrUtwDB7HxT9DDpw==",
"dependencies": {
"denque": "^2.1.0",
"generate-function": "^2.3.1",
"iconv-lite": "^0.6.3",
"long": "^5.2.1",
"lru-cache": "^8.0.0",
"named-placeholders": "^1.1.3",
"seq-queue": "^0.0.5",
"sqlstring": "^2.3.2"
},
"engines": {
"node": ">= 8.0"
}
},
"node_modules/mysql2/node_modules/iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/named-placeholders": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz",
"integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==",
"dependencies": {
"lru-cache": "^7.14.1"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/named-placeholders/node_modules/lru-cache": {
"version": "7.18.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
"integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
"engines": {
"node": ">=12"
}
},
"node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/object-inspect": {
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
"integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"dependencies": {
"ee-first": "1.1.1"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
},
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"dependencies": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dependencies": {
"side-channel": "^1.0.4"
},
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/raw-body": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
"on-finished": "2.4.1",
"range-parser": "~1.2.1",
"statuses": "2.0.1"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/send/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/seq-queue": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
},
"node_modules/serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dependencies": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"gopd": "^1.0.1",
"has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
},
"node_modules/side-channel": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.4",
"object-inspect": "^1.13.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/sqlstring": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
"integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"engines": {
"node": ">=0.6"
}
},
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"engines": {
"node": ">= 0.8"
}
}
}
}

17
server/package.json Normal file
View file

@ -0,0 +1,17 @@
{
"name": "server",
"version": "1.0.0",
"description": "web server expressjs",
"main": "app.js",
"scripts": {
"start": "node app.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Troispoils",
"license": "ISC",
"dependencies": {
"dotenv": "^16.4.5",
"express": "^4.19.2",
"mysql2": "^3.9.7"
}
}

4
server/process.env Normal file
View file

@ -0,0 +1,4 @@
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=CHANGEIT
DB_DATABASE=ac2re_world

24
server/utils/utilsMath.js Normal file
View file

@ -0,0 +1,24 @@
const blockSize = 16;
function decimalToHex(decimalValue) {
// Convertit la valeur décimale en hexadécimal
let hexString = decimalValue.toString(16).toUpperCase();
// Divise la chaîne hexadécimale en deux parties
let firstByte = "0x" + hexString.slice(0, -2);
let secondByte = "0x" + hexString.slice(-2);
return [firstByte, secondByte];
}
function convertInGameLoctoLeafletLoc(landblockId, x, y) {
let [lbx, lby] = decimalToHex(landblockId);
lbx = lbx * blockSize;
lby = lby * blockSize;
let locx = lbx + x / 10;
let locy = 4080 - (lby + y / 10) - 1;
locx = locx / 16;
locy = (locy / 16) * -1;
// Renvoyer les coordonnées converties
return { locx, locy };
}
module.exports = { convertInGameLoctoLeafletLoc };