Compare commits

..

15 Commits

16 changed files with 466 additions and 196 deletions
+1
View File
@@ -0,0 +1 @@
Looking for artists for assets for this game! Need backgrounds, icons and character portraits! Join discord for more info!
+151 -151
View File
@@ -1,28 +1,37 @@
{ {
"name": "adventurers-guild", "name": "adventurers-guild",
"version": "0.7.0", "version": "0.9.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "adventurers-guild", "name": "adventurers-guild",
"version": "0.7.0", "version": "0.9.0",
"dependencies": { "dependencies": {
"@vueuse/components": "^9.13.0", "@vueuse/components": "^9.13.0",
"sass": "^1.63.4", "sass": "^1.63.6",
"vue": "^3.3.4", "vue": "^3.3.4",
"vue-router": "^4.2.2" "vue-router": "^4.2.2"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^18.16.18", "@types/node": "^18.16.19",
"@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue": "^4.2.3",
"@vue/tsconfig": "^0.4.0", "@vue/tsconfig": "^0.4.0",
"eslint": "^8.43.0", "eslint": "^8.44.0",
"eslint-plugin-vue": "^9.15.0", "eslint-plugin-vue": "^9.15.1",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"typescript": "~5.1.3", "typescript": "~5.1.6",
"vite": "4.3.9", "vite": "4.3.9",
"vue-tsc": "^1.8.1" "vue-tsc": "^1.8.3"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
"dev": true,
"engines": {
"node": ">=0.10.0"
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
@@ -413,14 +422,14 @@
} }
}, },
"node_modules/@eslint/eslintrc": { "node_modules/@eslint/eslintrc": {
"version": "2.0.3", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz",
"integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
"debug": "^4.3.2", "debug": "^4.3.2",
"espree": "^9.5.2", "espree": "^9.6.0",
"globals": "^13.19.0", "globals": "^13.19.0",
"ignore": "^5.2.0", "ignore": "^5.2.0",
"import-fresh": "^3.2.1", "import-fresh": "^3.2.1",
@@ -436,9 +445,9 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "8.43.0", "version": "8.44.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz",
"integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -518,9 +527,9 @@
} }
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "18.16.18", "version": "18.16.19",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.19.tgz",
"integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==", "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==",
"dev": true "dev": true
}, },
"node_modules/@types/web-bluetooth": { "node_modules/@types/web-bluetooth": {
@@ -542,30 +551,30 @@
} }
}, },
"node_modules/@volar/language-core": { "node_modules/@volar/language-core": {
"version": "1.7.8", "version": "1.7.10",
"resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.7.8.tgz", "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.7.10.tgz",
"integrity": "sha512-TPklg4c2e/f1xB/MGZEiQc3AWG+dH64ZfBlYjFB8nNaWJt4Z4k+IHBhmaP52APG+5PHFerwiWI9oF002RrRTPA==", "integrity": "sha512-18Gmth5M0UI3hDDqhZngjMnb6WCslcfglkOdepRIhGxRYe7xR7DRRzciisYDMZsvOQxDYme+uaohg0dKUxLV2Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@volar/source-map": "1.7.8" "@volar/source-map": "1.7.10"
} }
}, },
"node_modules/@volar/source-map": { "node_modules/@volar/source-map": {
"version": "1.7.8", "version": "1.7.10",
"resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.7.8.tgz", "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.7.10.tgz",
"integrity": "sha512-g2dtC2kOghvfzMDWeODIo4HO1Ml4hxzPTZyAFDz+YhRF9HjZYJSCaWaVuPZ+z0kY+T2daOHYA10GdrWQ5q0teA==", "integrity": "sha512-FBpLEOKJpRxeh2nYbw1mTI5sZOPXYU8LlsCz6xuBY3yNtAizDTTIZtBHe1V8BaMpoSMgRysZe4gVxMEi3rDGVA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"muggle-string": "^0.3.1" "muggle-string": "^0.3.1"
} }
}, },
"node_modules/@volar/typescript": { "node_modules/@volar/typescript": {
"version": "1.7.8", "version": "1.7.10",
"resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.7.8.tgz", "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.7.10.tgz",
"integrity": "sha512-NDcI5ZQcdr8kgxzMQrhSSWIM8Tl0MbMFrkvJPTjfm2rdAQZPFT8zv3LrEW9Fqh0e9z2YbCry7jr4a/GShBqeDA==", "integrity": "sha512-yqIov4wndLU3GE1iE25bU5W6T+P+exPePcE1dFPPBKzQIBki1KvmdQN5jBlJp3Wo+wp7UIxa/RsdNkXT+iFBjg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@volar/language-core": "1.7.8" "@volar/language-core": "1.7.10"
} }
}, },
"node_modules/@vue/compiler-core": { "node_modules/@vue/compiler-core": {
@@ -620,13 +629,13 @@
"integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
}, },
"node_modules/@vue/language-core": { "node_modules/@vue/language-core": {
"version": "1.8.1", "version": "1.8.3",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.1.tgz", "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.3.tgz",
"integrity": "sha512-pumv3k4J7P58hVh4YGRM9Qz3HaAr4TlFWM9bnVOkZ/2K9o2CK1lAP2y9Jw+Z0+mNL4F2uWQqnAPzj3seLyfpDA==", "integrity": "sha512-AzhvMYoQkK/tg8CpAAttO19kx1zjS3+weYIr2AhlH/M5HebVzfftQoq4jZNFifjq+hyLKi8j9FiDMS8oqA89+A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@volar/language-core": "1.7.8", "@volar/language-core": "1.7.10",
"@volar/source-map": "1.7.8", "@volar/source-map": "1.7.10",
"@vue/compiler-dom": "^3.3.0", "@vue/compiler-dom": "^3.3.0",
"@vue/reactivity": "^3.3.0", "@vue/reactivity": "^3.3.0",
"@vue/shared": "^3.3.0", "@vue/shared": "^3.3.0",
@@ -653,9 +662,9 @@
} }
}, },
"node_modules/@vue/language-core/node_modules/minimatch": { "node_modules/@vue/language-core/node_modules/minimatch": {
"version": "9.0.1", "version": "9.0.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz",
"integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"brace-expansion": "^2.0.1" "brace-expansion": "^2.0.1"
@@ -730,13 +739,13 @@
"dev": true "dev": true
}, },
"node_modules/@vue/typescript": { "node_modules/@vue/typescript": {
"version": "1.8.1", "version": "1.8.3",
"resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.1.tgz", "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.3.tgz",
"integrity": "sha512-nQpo55j/roie8heCfqyXHnyayqD5+p4/0fzfxH4ZuHf7NSBQS791PNv7ztp2CCOjnGAiaiCMdtC9rc6oriyPUg==", "integrity": "sha512-6bdgSnIFpRYHlt70pHmnmNksPU00bfXgqAISeaNz3W6d2cH0OTfH8h/IhligQ82sJIhsuyfftQJ5518ZuKIhtA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@volar/typescript": "1.7.8", "@volar/typescript": "1.7.10",
"@vue/language-core": "1.8.1" "@vue/language-core": "1.8.3"
} }
}, },
"node_modules/@vueuse/components": { "node_modules/@vueuse/components": {
@@ -1307,15 +1316,15 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "8.43.0", "version": "8.44.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz",
"integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.4.0", "@eslint-community/regexpp": "^4.4.0",
"@eslint/eslintrc": "^2.0.3", "@eslint/eslintrc": "^2.1.0",
"@eslint/js": "8.43.0", "@eslint/js": "8.44.0",
"@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/config-array": "^0.11.10",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
@@ -1327,7 +1336,7 @@
"escape-string-regexp": "^4.0.0", "escape-string-regexp": "^4.0.0",
"eslint-scope": "^7.2.0", "eslint-scope": "^7.2.0",
"eslint-visitor-keys": "^3.4.1", "eslint-visitor-keys": "^3.4.1",
"espree": "^9.5.2", "espree": "^9.6.0",
"esquery": "^1.4.2", "esquery": "^1.4.2",
"esutils": "^2.0.2", "esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
@@ -1347,7 +1356,7 @@
"lodash.merge": "^4.6.2", "lodash.merge": "^4.6.2",
"minimatch": "^3.1.2", "minimatch": "^3.1.2",
"natural-compare": "^1.4.0", "natural-compare": "^1.4.0",
"optionator": "^0.9.1", "optionator": "^0.9.3",
"strip-ansi": "^6.0.1", "strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0", "strip-json-comments": "^3.1.0",
"text-table": "^0.2.0" "text-table": "^0.2.0"
@@ -1363,9 +1372,9 @@
} }
}, },
"node_modules/eslint-plugin-vue": { "node_modules/eslint-plugin-vue": {
"version": "9.15.0", "version": "9.15.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz",
"integrity": "sha512-XYzpK6e2REli100+6iCeBA69v6Sm0D/yK2FZP+fCeNt0yH/m82qZQq+ztseyV0JsKdhFysuSEzeE1yCmSC92BA==", "integrity": "sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.3.0", "@eslint-community/eslint-utils": "^4.3.0",
@@ -1580,12 +1589,12 @@
} }
}, },
"node_modules/espree": { "node_modules/espree": {
"version": "9.5.2", "version": "9.6.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz",
"integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"acorn": "^8.8.0", "acorn": "^8.9.0",
"acorn-jsx": "^5.3.2", "acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
}, },
@@ -2598,17 +2607,17 @@
} }
}, },
"node_modules/optionator": { "node_modules/optionator": {
"version": "0.9.1", "version": "0.9.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3", "deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6", "fast-levenshtein": "^2.0.6",
"levn": "^0.4.1", "levn": "^0.4.1",
"prelude-ls": "^1.2.1", "prelude-ls": "^1.2.1",
"type-check": "^0.4.0", "type-check": "^0.4.0"
"word-wrap": "^1.2.3"
}, },
"engines": { "engines": {
"node": ">= 0.8.0" "node": ">= 0.8.0"
@@ -2976,9 +2985,9 @@
} }
}, },
"node_modules/sass": { "node_modules/sass": {
"version": "1.63.4", "version": "1.63.6",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.63.4.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz",
"integrity": "sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==", "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==",
"dependencies": { "dependencies": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0", "immutable": "^4.0.0",
@@ -3259,9 +3268,9 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.1.3", "version": "5.1.6",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
"integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
"dev": true, "dev": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
@@ -3435,13 +3444,13 @@
} }
}, },
"node_modules/vue-tsc": { "node_modules/vue-tsc": {
"version": "1.8.1", "version": "1.8.3",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.1.tgz", "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.3.tgz",
"integrity": "sha512-GxBQrcb0Qvyrj1uZqnTXQyWbXdNDRY2MTa+r7ESgjhf+WzBSdxZfkS3KD/C3WhKYG+aN8hf44Hp5Gqzb6PehAA==", "integrity": "sha512-Ua4DHuYxjudlhCW2nRZtaXbhIDVncRGIbDjZhHpF8Z8vklct/G/35/kAPuGNSOmq0JcvhPAe28Oa7LWaUerZVA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@vue/language-core": "1.8.1", "@vue/language-core": "1.8.3",
"@vue/typescript": "1.8.1", "@vue/typescript": "1.8.3",
"semver": "^7.3.8" "semver": "^7.3.8"
}, },
"bin": { "bin": {
@@ -3514,15 +3523,6 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/wrappy": { "node_modules/wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -3558,6 +3558,12 @@
} }
}, },
"dependencies": { "dependencies": {
"@aashutoshrathi/word-wrap": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
"integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
"dev": true
},
"@babel/parser": { "@babel/parser": {
"version": "7.22.5", "version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz",
@@ -3733,14 +3739,14 @@
"dev": true "dev": true
}, },
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "2.0.3", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz",
"integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==",
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
"debug": "^4.3.2", "debug": "^4.3.2",
"espree": "^9.5.2", "espree": "^9.6.0",
"globals": "^13.19.0", "globals": "^13.19.0",
"ignore": "^5.2.0", "ignore": "^5.2.0",
"import-fresh": "^3.2.1", "import-fresh": "^3.2.1",
@@ -3750,9 +3756,9 @@
} }
}, },
"@eslint/js": { "@eslint/js": {
"version": "8.43.0", "version": "8.44.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz",
"integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==",
"dev": true "dev": true
}, },
"@humanwhocodes/config-array": { "@humanwhocodes/config-array": {
@@ -3810,9 +3816,9 @@
} }
}, },
"@types/node": { "@types/node": {
"version": "18.16.18", "version": "18.16.19",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.19.tgz",
"integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==", "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==",
"dev": true "dev": true
}, },
"@types/web-bluetooth": { "@types/web-bluetooth": {
@@ -3828,30 +3834,30 @@
"requires": {} "requires": {}
}, },
"@volar/language-core": { "@volar/language-core": {
"version": "1.7.8", "version": "1.7.10",
"resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.7.8.tgz", "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.7.10.tgz",
"integrity": "sha512-TPklg4c2e/f1xB/MGZEiQc3AWG+dH64ZfBlYjFB8nNaWJt4Z4k+IHBhmaP52APG+5PHFerwiWI9oF002RrRTPA==", "integrity": "sha512-18Gmth5M0UI3hDDqhZngjMnb6WCslcfglkOdepRIhGxRYe7xR7DRRzciisYDMZsvOQxDYme+uaohg0dKUxLV2Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"@volar/source-map": "1.7.8" "@volar/source-map": "1.7.10"
} }
}, },
"@volar/source-map": { "@volar/source-map": {
"version": "1.7.8", "version": "1.7.10",
"resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.7.8.tgz", "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.7.10.tgz",
"integrity": "sha512-g2dtC2kOghvfzMDWeODIo4HO1Ml4hxzPTZyAFDz+YhRF9HjZYJSCaWaVuPZ+z0kY+T2daOHYA10GdrWQ5q0teA==", "integrity": "sha512-FBpLEOKJpRxeh2nYbw1mTI5sZOPXYU8LlsCz6xuBY3yNtAizDTTIZtBHe1V8BaMpoSMgRysZe4gVxMEi3rDGVA==",
"dev": true, "dev": true,
"requires": { "requires": {
"muggle-string": "^0.3.1" "muggle-string": "^0.3.1"
} }
}, },
"@volar/typescript": { "@volar/typescript": {
"version": "1.7.8", "version": "1.7.10",
"resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.7.8.tgz", "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.7.10.tgz",
"integrity": "sha512-NDcI5ZQcdr8kgxzMQrhSSWIM8Tl0MbMFrkvJPTjfm2rdAQZPFT8zv3LrEW9Fqh0e9z2YbCry7jr4a/GShBqeDA==", "integrity": "sha512-yqIov4wndLU3GE1iE25bU5W6T+P+exPePcE1dFPPBKzQIBki1KvmdQN5jBlJp3Wo+wp7UIxa/RsdNkXT+iFBjg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@volar/language-core": "1.7.8" "@volar/language-core": "1.7.10"
} }
}, },
"@vue/compiler-core": { "@vue/compiler-core": {
@@ -3906,13 +3912,13 @@
"integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
}, },
"@vue/language-core": { "@vue/language-core": {
"version": "1.8.1", "version": "1.8.3",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.1.tgz", "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.3.tgz",
"integrity": "sha512-pumv3k4J7P58hVh4YGRM9Qz3HaAr4TlFWM9bnVOkZ/2K9o2CK1lAP2y9Jw+Z0+mNL4F2uWQqnAPzj3seLyfpDA==", "integrity": "sha512-AzhvMYoQkK/tg8CpAAttO19kx1zjS3+weYIr2AhlH/M5HebVzfftQoq4jZNFifjq+hyLKi8j9FiDMS8oqA89+A==",
"dev": true, "dev": true,
"requires": { "requires": {
"@volar/language-core": "1.7.8", "@volar/language-core": "1.7.10",
"@volar/source-map": "1.7.8", "@volar/source-map": "1.7.10",
"@vue/compiler-dom": "^3.3.0", "@vue/compiler-dom": "^3.3.0",
"@vue/reactivity": "^3.3.0", "@vue/reactivity": "^3.3.0",
"@vue/shared": "^3.3.0", "@vue/shared": "^3.3.0",
@@ -3931,9 +3937,9 @@
} }
}, },
"minimatch": { "minimatch": {
"version": "9.0.1", "version": "9.0.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz",
"integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==",
"dev": true, "dev": true,
"requires": { "requires": {
"brace-expansion": "^2.0.1" "brace-expansion": "^2.0.1"
@@ -4001,13 +4007,13 @@
"dev": true "dev": true
}, },
"@vue/typescript": { "@vue/typescript": {
"version": "1.8.1", "version": "1.8.3",
"resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.1.tgz", "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.3.tgz",
"integrity": "sha512-nQpo55j/roie8heCfqyXHnyayqD5+p4/0fzfxH4ZuHf7NSBQS791PNv7ztp2CCOjnGAiaiCMdtC9rc6oriyPUg==", "integrity": "sha512-6bdgSnIFpRYHlt70pHmnmNksPU00bfXgqAISeaNz3W6d2cH0OTfH8h/IhligQ82sJIhsuyfftQJ5518ZuKIhtA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@volar/typescript": "1.7.8", "@volar/typescript": "1.7.10",
"@vue/language-core": "1.8.1" "@vue/language-core": "1.8.3"
} }
}, },
"@vueuse/components": { "@vueuse/components": {
@@ -4411,15 +4417,15 @@
"dev": true "dev": true
}, },
"eslint": { "eslint": {
"version": "8.43.0", "version": "8.44.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz",
"integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==",
"dev": true, "dev": true,
"requires": { "requires": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.4.0", "@eslint-community/regexpp": "^4.4.0",
"@eslint/eslintrc": "^2.0.3", "@eslint/eslintrc": "^2.1.0",
"@eslint/js": "8.43.0", "@eslint/js": "8.44.0",
"@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/config-array": "^0.11.10",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
@@ -4431,7 +4437,7 @@
"escape-string-regexp": "^4.0.0", "escape-string-regexp": "^4.0.0",
"eslint-scope": "^7.2.0", "eslint-scope": "^7.2.0",
"eslint-visitor-keys": "^3.4.1", "eslint-visitor-keys": "^3.4.1",
"espree": "^9.5.2", "espree": "^9.6.0",
"esquery": "^1.4.2", "esquery": "^1.4.2",
"esutils": "^2.0.2", "esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
@@ -4451,7 +4457,7 @@
"lodash.merge": "^4.6.2", "lodash.merge": "^4.6.2",
"minimatch": "^3.1.2", "minimatch": "^3.1.2",
"natural-compare": "^1.4.0", "natural-compare": "^1.4.0",
"optionator": "^0.9.1", "optionator": "^0.9.3",
"strip-ansi": "^6.0.1", "strip-ansi": "^6.0.1",
"strip-json-comments": "^3.1.0", "strip-json-comments": "^3.1.0",
"text-table": "^0.2.0" "text-table": "^0.2.0"
@@ -4565,9 +4571,9 @@
} }
}, },
"eslint-plugin-vue": { "eslint-plugin-vue": {
"version": "9.15.0", "version": "9.15.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.15.1.tgz",
"integrity": "sha512-XYzpK6e2REli100+6iCeBA69v6Sm0D/yK2FZP+fCeNt0yH/m82qZQq+ztseyV0JsKdhFysuSEzeE1yCmSC92BA==", "integrity": "sha512-CJE/oZOslvmAR9hf8SClTdQ9JLweghT6JCBQNrT2Iel1uVw0W0OLJxzvPd6CxmABKCvLrtyDnqGV37O7KQv6+A==",
"dev": true, "dev": true,
"requires": { "requires": {
"@eslint-community/eslint-utils": "^4.3.0", "@eslint-community/eslint-utils": "^4.3.0",
@@ -4607,12 +4613,12 @@
"dev": true "dev": true
}, },
"espree": { "espree": {
"version": "9.5.2", "version": "9.6.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz",
"integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==",
"dev": true, "dev": true,
"requires": { "requires": {
"acorn": "^8.8.0", "acorn": "^8.9.0",
"acorn-jsx": "^5.3.2", "acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^3.4.1" "eslint-visitor-keys": "^3.4.1"
} }
@@ -5346,17 +5352,17 @@
} }
}, },
"optionator": { "optionator": {
"version": "0.9.1", "version": "0.9.3",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3", "deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6", "fast-levenshtein": "^2.0.6",
"levn": "^0.4.1", "levn": "^0.4.1",
"prelude-ls": "^1.2.1", "prelude-ls": "^1.2.1",
"type-check": "^0.4.0", "type-check": "^0.4.0"
"word-wrap": "^1.2.3"
} }
}, },
"p-limit": { "p-limit": {
@@ -5581,9 +5587,9 @@
} }
}, },
"sass": { "sass": {
"version": "1.63.4", "version": "1.63.6",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.63.4.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.6.tgz",
"integrity": "sha512-Sx/+weUmK+oiIlI+9sdD0wZHsqpbgQg8wSwSnGBjwb5GwqFhYNwwnI+UWZtLjKvKyFlKkatRK235qQ3mokyPoQ==", "integrity": "sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==",
"requires": { "requires": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0", "immutable": "^4.0.0",
@@ -5786,9 +5792,9 @@
} }
}, },
"typescript": { "typescript": {
"version": "5.1.3", "version": "5.1.6",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
"integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
"dev": true "dev": true
}, },
"unbox-primitive": { "unbox-primitive": {
@@ -5897,13 +5903,13 @@
} }
}, },
"vue-tsc": { "vue-tsc": {
"version": "1.8.1", "version": "1.8.3",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.1.tgz", "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.3.tgz",
"integrity": "sha512-GxBQrcb0Qvyrj1uZqnTXQyWbXdNDRY2MTa+r7ESgjhf+WzBSdxZfkS3KD/C3WhKYG+aN8hf44Hp5Gqzb6PehAA==", "integrity": "sha512-Ua4DHuYxjudlhCW2nRZtaXbhIDVncRGIbDjZhHpF8Z8vklct/G/35/kAPuGNSOmq0JcvhPAe28Oa7LWaUerZVA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@vue/language-core": "1.8.1", "@vue/language-core": "1.8.3",
"@vue/typescript": "1.8.1", "@vue/typescript": "1.8.3",
"semver": "^7.3.8" "semver": "^7.3.8"
}, },
"dependencies": { "dependencies": {
@@ -5954,12 +5960,6 @@
"is-typed-array": "^1.1.10" "is-typed-array": "^1.1.10"
} }
}, },
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+7 -7
View File
@@ -1,6 +1,6 @@
{ {
"name": "adventurers-guild", "name": "adventurers-guild",
"version": "0.8.0", "version": "0.10.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
@@ -11,19 +11,19 @@
}, },
"dependencies": { "dependencies": {
"@vueuse/components": "^9.13.0", "@vueuse/components": "^9.13.0",
"sass": "^1.63.4", "sass": "^1.63.6",
"vue": "^3.3.4", "vue": "^3.3.4",
"vue-router": "^4.2.2" "vue-router": "^4.2.2"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^18.16.18", "@types/node": "^18.16.19",
"@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue": "^4.2.3",
"@vue/tsconfig": "^0.4.0", "@vue/tsconfig": "^0.4.0",
"eslint": "^8.43.0", "eslint": "^8.44.0",
"eslint-plugin-vue": "^9.15.0", "eslint-plugin-vue": "^9.15.1",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"typescript": "~5.1.3", "typescript": "~5.1.6",
"vite": "4.3.9", "vite": "4.3.9",
"vue-tsc": "^1.8.1" "vue-tsc": "^1.8.3"
} }
} }
+58 -19
View File
@@ -20,10 +20,28 @@ import {version} from "../package.json"
</section> </section>
<header> <header>
<nav> <nav>
<RouterLink :to="{name: 'guild'}">Guild</RouterLink> <RouterLink
<RouterLink :to="{name: 'quests'}">Quests</RouterLink> :to="{name: 'guild'}"
<RouterLink :to="{name: 'adventurers'}">Adventurers</RouterLink> >
<RouterLink :to="{name: 'technical'}"><img class="icon" src="/img/icons/cog.svg" alt="Technical"></RouterLink> Guild
</RouterLink>
<RouterLink
:to="{name: 'quests'}"
>
Quests
</RouterLink>
<RouterLink
:to="{name: 'adventurers'}"
>
Adventurers
</RouterLink>
<RouterLink
data-tooltip="Technical information"
data-tooltip-position="bottom"
:to="{name: 'technical'}"
>
<img class="icon" src="/img/icons/cog.svg" alt="Technical">
</RouterLink>
</nav> </nav>
</header> </header>
<RouterView <RouterView
@@ -31,8 +49,8 @@ import {version} from "../package.json"
:adventurers="adventurers" :adventurers="adventurers"
:quests="missives" :quests="missives"
:adventurerForHire="adventurerForHire" :adventurerForHire="adventurerForHire"
:news="news"
@finalizeQuest="finalizeQuest($event)" @finalizeQuest="finalizeQuest($event)"
@wipeSave="resetSave()"
@recruitActionTaken="recruitAction($event)" @recruitActionTaken="recruitAction($event)"
/> />
</template> </template>
@@ -62,9 +80,11 @@ export default defineComponent({
name: "GuildView", name: "GuildView",
data: () => ({ data: () => ({
loading: true as boolean, loading: true as boolean,
screenWakeLock: null as null | WakeLockSentinel,
guild: new Guild(1, 500), guild: new Guild(1, 500),
gameTickTask: null as null | number, gameTickTask: null as null | number,
gameSaveTask: null as null | number, gameSaveTask: null as null | number,
news: "" as string,
lastQuestGot: { lastQuestGot: {
S: null as null | number, S: null as null | number,
A: null as null | number, A: null as null | number,
@@ -160,7 +180,7 @@ export default defineComponent({
const questsForRank = this.quests[rank] as { [key: string]: Quest }; const questsForRank = this.quests[rank] as { [key: string]: Quest };
const randomId = keys.length * Math.random() << 0; const randomId = keys.length * Math.random() << 0;
const randomIdString = keys[randomId] as string; const randomIdString = keys[randomId] as string;
return getQuestWithRewards(questsForRank[randomIdString], this.guild.expModifier.getModifier()); return getQuestWithRewards(questsForRank[randomIdString], this.guild.expModifier.getModifier(), this.guild.goldModifier.getModifier());
}, },
createMissive(questToAdd: Quest, rank: QuestRank) { createMissive(questToAdd: Quest, rank: QuestRank) {
const quest = JSON.parse(JSON.stringify(questToAdd)); const quest = JSON.parse(JSON.stringify(questToAdd));
@@ -241,19 +261,36 @@ export default defineComponent({
} }
} }
}, },
resetSave() { async updateNews() {
if (!confirm("You are about to wipe your save file. Are you sure?")) return; const result = await fetch("https://raw.githubusercontent.com/YouHaveTrouble/GuildMaster/master/news.txt").catch(() => {
window.localStorage.removeItem("savedGame"); return null;
window.location.reload(); });
if (result === null) return;
this.news = await result.text();
} }
}, },
async mounted() { async mounted() {
setInterval(async () => {
if (this.screenWakeLock) return;
try {
this.screenWakeLock = await navigator.wakeLock.request("screen");
console.debug("Screen wake lock acquired");
} catch (e) {}
}, 1000);
console.debug("Loading game data") console.debug("Loading game data")
const promises = await Promise.all([ const promises = await Promise.all([
loadAvailableQuests(), loadAvailableQuests(),
loadAdventurersForHire(), loadAdventurersForHire(),
]); ]);
this.updateNews().then(() => {
setInterval(() => {
this.updateNews();
}, 1000 * 60 * 60);
});
this.quests = promises[0] as { [key: string]: { [key: string]: Quest } }; this.quests = promises[0] as { [key: string]: { [key: string]: Quest } };
this.adventurersDatabase = promises[1] as Array<Adventurer>; this.adventurersDatabase = promises[1] as Array<Adventurer>;
console.debug("Game data loaded!") console.debug("Game data loaded!")
@@ -344,7 +381,7 @@ export default defineComponent({
} }
if (this.guild.level < 6) return; if (this.guild.level < 6) return;
if (Number(now) - Number(this.lastQuestGot.A) >= 5 * 60 * 1000) { if (Number(now) - Number(this.lastQuestGot.A) >= 3 * 60 * 1000) {
this.lastQuestGot.A = now; this.lastQuestGot.A = now;
const keys = Object.keys(this.missives[QuestRank.A]); const keys = Object.keys(this.missives[QuestRank.A]);
if (keys.length >= 5) return; if (keys.length >= 5) return;
@@ -355,7 +392,7 @@ export default defineComponent({
} }
if (this.guild.level < 6) return; if (this.guild.level < 6) return;
if (Number(now) - Number(this.lastQuestGot.S) >= 30 * 60 * 1000) { if (Number(now) - Number(this.lastQuestGot.S) >= 5 * 60 * 1000) {
this.lastQuestGot.S = now; this.lastQuestGot.S = now;
const keys = Object.keys(this.missives[QuestRank.S]); const keys = Object.keys(this.missives[QuestRank.S]);
if (keys.length >= 5) return; if (keys.length >= 5) return;
@@ -394,22 +431,24 @@ nav {
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
gap: 1rem; gap: 1rem;
padding: 2rem; padding-inline: 2rem;
background-size: 200px; padding-bottom: 2rem;
background-blend-mode: darken; padding-top: 0.5rem;
background-color: rgba(0, 0, 0, 0.65); background-size: 100%;
background-repeat: no-repeat;
background-position: bottom;
background-image: url("/img/background/panels/wall_panel_empty.png");
filter: drop-shadow(0 0 0.5rem rgba(0,0,0, 0.25));
.icon { .icon {
width: 2rem; width: 2rem;
height: 2rem; height: 2rem;
fill: white;
filter: invert(1);
transform: translateY(0.35rem); transform: translateY(0.35rem);
} }
a { a {
font-size: 2rem; font-size: 2rem;
color: #fff; color: #000;
text-decoration: none; text-decoration: none;
&.router-link-active { &.router-link-active {
+54
View File
@@ -112,3 +112,57 @@ body {
line-height: 0.25; line-height: 0.25;
} }
} }
[data-tooltip] {
position: relative;
&:after {
pointer-events: none;
transition: opacity 0.25s ease-in-out;
opacity: 0;
position: absolute;
display: flex;
justify-content: center;
align-items: center;
width: max-content;
min-height: 2rem;
background-color: rgba(0,0,0, 0.5);
color: #fff;
font-size: 1rem;
padding-block: 0.25rem;
padding-inline: 0.5rem;
white-space: break-spaces;
}
&[data-tooltip-position="bottom"]:after {
content: attr(data-tooltip);
bottom: calc(-100% - 0.5rem);
left: 50%;
transform: translateX(-50%);
max-width: 200%;
}
&[data-tooltip-position="top"]:after {
content: attr(data-tooltip);
top: calc(-100% - 0.5rem);
left: 50%;
transform: translateX(-50%);
max-width: 200%;
}
&[data-tooltip-position="left"]:after {
content: attr(data-tooltip);
top: 50%;
right: calc(100% + 0.5rem);
transform: translateY(-50%);
max-width: 20rem;
}
&[data-tooltip-position="right"]:after {
content: attr(data-tooltip);
top: 50%;
left: calc(100% + 0.5rem);
transform: translateY(-50%);
max-width: 20rem;
}
&:hover:after {
opacity: 100%;
}
}
+3 -2
View File
@@ -34,8 +34,9 @@ export class Quest {
* Generate rewards for a quest and return it * Generate rewards for a quest and return it
* @param quest * @param quest
* @param expModifier - multiplification modifier for the exp reward * @param expModifier - multiplification modifier for the exp reward
* @param goldModifier - multiplification modifier for the gold reward
*/ */
export function getQuestWithRewards(quest: Quest, expModifier: number = 1) { export function getQuestWithRewards(quest: Quest, expModifier: number = 1, goldModifier: number = 1) {
let maxProgress = 1; let maxProgress = 1;
@@ -70,7 +71,7 @@ export function getQuestWithRewards(quest: Quest, expModifier: number = 1) {
break; break;
} }
let goldReward = Math.floor(maxProgress/6); let goldReward = Math.floor(maxProgress/6 * goldModifier);
let expReward = Math.floor((Math.floor(maxProgress/120) - maxProgress/1000) * expModifier); let expReward = Math.floor((Math.floor(maxProgress/120) - maxProgress/1000) * expModifier);
// add some randomness to the rewards // add some randomness to the rewards
@@ -14,8 +14,8 @@ export default class AdventurerCapacityUpgrade extends GuildUpgrade {
} }
getCostForLevel(level: number): number { getCostForLevel(level: number): number {
const scalingFactor = Math.pow(1.35, level - 1); if (level === 1) return 1500;
return Math.floor(1500 * scalingFactor * Math.pow(level, 1.35)); return Math.floor(1500 * (level * 4));
} }
/** /**
@@ -20,8 +20,26 @@ export default class AutoFinishQuestsUpgrade extends GuildUpgrade implements Max
} }
getCostForLevel(level: number): number { getCostForLevel(level: number): number {
const scalingFactor = Math.pow(4.2, level - 1); switch (level) {
return Math.floor(25000 * scalingFactor * Math.pow(level, 1.05)); case 1:
return 25000;
case 2:
return 50000;
case 3:
return 75000;
case 4:
return 150000;
case 5:
return 275000;
case 6:
return 750000;
case 7:
return 1500000;
case 8:
return 2500000;
default:
return 0;
}
} }
isMaxLevel(): boolean { isMaxLevel(): boolean {
+2 -2
View File
@@ -14,8 +14,8 @@ export default class QuestExpUpgrade extends GuildUpgrade {
} }
getCostForLevel(level: number): number { getCostForLevel(level: number): number {
const scalingFactor = Math.pow(1.05, level - 1); if (level === 1) return 1000000;
return Math.floor(2500000 * scalingFactor * Math.pow(level, 1.01)); return Math.floor(1000000 * (level * 1.05));
} }
getModifier(): number { getModifier(): number {
@@ -14,8 +14,8 @@ export default class QuestGoldUpgrade extends GuildUpgrade {
} }
getCostForLevel(level: number): number { getCostForLevel(level: number): number {
const scalingFactor = Math.pow(1.05, level - 1); if (level === 1) return 1000000;
return Math.floor(2500000 * scalingFactor * Math.pow(level, 1.01)); return Math.floor(1000000 * (level * 1.05));
} }
getModifier(): number { getModifier(): number {
+3 -1
View File
@@ -70,7 +70,9 @@ export default defineComponent({
}, },
methods: { methods: {
closeSelect() { closeSelect() {
this.selection = false; setTimeout(() => {
this.selection = false;
}, 0);
} }
} }
}) })
+2 -2
View File
@@ -27,7 +27,7 @@
</button> </button>
</div> </div>
<div class="upgrade" v-if="guild.level >= guild.expModifier.guildLevelRequirement"> <div class="upgrade" v-if="guild.level >= guild.expModifier.guildLevelRequirement">
<span>Quest exp modifier (level {{ guild.expModifier.level }})</span> <span>Quest exp modifier (level {{ guild.expModifier.level - 1 }})</span>
<small>Increases exp from newly offered quests by 10% per level</small> <small>Increases exp from newly offered quests by 10% per level</small>
<button <button
class="button metal" class="button metal"
@@ -39,7 +39,7 @@
</button> </button>
</div> </div>
<div class="upgrade" v-if="guild.level >= guild.goldModifier.guildLevelRequirement"> <div class="upgrade" v-if="guild.level >= guild.goldModifier.guildLevelRequirement">
<span>Quest gold modifier (level {{ guild.goldModifier.level }})</span> <span>Quest gold modifier (level {{ guild.goldModifier.level - 1 }})</span>
<small>Increases gold from newly offered quests by 10% per level</small> <small>Increases gold from newly offered quests by 10% per level</small>
<button <button
class="button metal" class="button metal"
@@ -53,7 +53,6 @@ export default defineComponent({
}, },
async mounted() { async mounted() {
this.getReleases(1); this.getReleases(1);
} }
}); });
</script> </script>
@@ -0,0 +1,146 @@
<template>
<div class="save-manager panel pinned-paper">
<dialog ref="importDialog" >
<div class="import-dialog">
<textarea
v-model="importSaveText"
placeholder="Paste your save data here"
></textarea>
<div style="display: flex; flex-direction: row; flex-wrap: wrap; gap: 0.5rem;">
<button type="button" class="button metal" @click="importSave()" :disabled="importSaveText === ''">
Import
</button>
<button class="close" @click="closeSaveImport"></button>
</div>
</div>
</dialog>
<div class="nail top-left">
<img src="/img/quests/overlays/nail.png" alt="" draggable="false"/>
</div>
<div class="nail top-right">
<img src="/img/quests/overlays/nail.png" alt="" draggable="false"/>
</div>
<h1>Save file</h1>
<div class="buttons">
<button class="button metal" @click="exportSave()">
Export
</button>
<button class="button metal" @click="openSaveImport()">
Import
</button>
<button class="button metal" @click="wipeSave()">
<span class="red">Wipe</span>
</button>
</div>
</div>
</template>
<script lang="ts">
import {defineComponent} from "vue";
export default defineComponent({
name: "ChangelogComponent",
data: () => ({
importSaveText: "",
}),
methods: {
openSaveImport() {
const dialog = this.$refs.importDialog as HTMLDialogElement;
dialog.showModal();
},
closeSaveImport() {
const dialog = this.$refs.importDialog as HTMLDialogElement;
dialog.close();
},
exportSave() {
const save = window.localStorage.getItem("savedGame");
if (!save) {
alert("No save file found!");
return;
}
navigator.clipboard.writeText(btoa(save));
setTimeout(() => alert("Save data copied to clipboard!"), 100);
},
importSave() {
const saveBase64 = this.importSaveText;
try {
const save = atob(saveBase64);
JSON.parse(save);
window.localStorage.setItem("savedGame", save);
window.location.reload();
} catch (e) {
alert("Invalid save file!");
return;
}
},
wipeSave() {
if (!confirm("You are about to wipe your save file. Are you sure?")) return;
window.localStorage.removeItem("savedGame");
window.location.reload();
},
}
});
</script>
<style scoped lang="scss">
.save-manager {
padding-block: 1rem;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 1rem;
max-width: 45rem;
width: 100%;
h1 {
margin-block: 0;
font-size: 2rem;
}
dialog {
padding: 0;
}
.buttons {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
flex-wrap: wrap;
gap: 0.25rem;
.red {
color: #d52121;
}
}
.import-dialog {
padding: 1rem;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: url("/img/background/panels/plaster.png");
background-size: 100% 100%;
gap: 1rem;
position: relative;
textarea {
width: 90%;
height: 10rem;
resize: none;
border: 1px solid var(--color-metal);
border-radius: 0.25rem;
padding: 0.5rem;
font-family: monospace;
}
.close {
color: #ab0707;
font-size: 2rem;
border: none;
background: transparent;
&:hover {
color: #d52121;
cursor: pointer;
}
}
}
}
</style>
+11 -3
View File
@@ -4,6 +4,7 @@
<h1>Guild Master</h1> <h1>Guild Master</h1>
<h3>Adventurer's guild management game</h3> <h3>Adventurer's guild management game</h3>
<small>v{{ version }}</small> <small>v{{ version }}</small>
<p class="news">{{ news }}</p>
</section> </section>
<section class="upgrades panel pinned-paper"> <section class="upgrades panel pinned-paper">
<div class="nail top-left"> <div class="nail top-left">
@@ -29,9 +30,6 @@
<section class="upgrade"> <section class="upgrade">
<UpgradesList :guild="guild"/> <UpgradesList :guild="guild"/>
</section> </section>
<section class="upgrade">
<span class="wipe-save" @click="$emit('wipeSave')">Wipe your save data</span>
</section>
</section> </section>
</main> </main>
@@ -56,6 +54,10 @@ export default defineComponent({
} }
}, },
props: { props: {
news: {
type: String,
default: "",
},
guild: { guild: {
type: Object as PropType<Guild>, type: Object as PropType<Guild>,
default: () => new Guild(1, 0) as Guild, default: () => new Guild(1, 0) as Guild,
@@ -77,9 +79,15 @@ main {
.upgrades { .upgrades {
max-width: 45rem; max-width: 45rem;
width: 100%; width: 100%;
padding-bottom: 1rem;
} }
} }
.news {
max-width: 75%;
color: #ab0707;
}
.coffer { .coffer {
text-align: center; text-align: center;
+4 -2
View File
@@ -19,6 +19,7 @@
</a> </a>
</div> </div>
</div> </div>
<SaveManagerComponent/>
<ChangelogComponent/> <ChangelogComponent/>
</section> </section>
@@ -26,11 +27,12 @@
<script lang="ts"> <script lang="ts">
import {defineComponent} from "vue"; import {defineComponent} from "vue";
import ChangelogComponent from "@/components/ChangelogComponent.vue"; import ChangelogComponent from "@/components/technical/ChangelogComponent.vue";
import SaveManagerComponent from "@/components/technical/SaveManagerComponent.vue";
export default defineComponent({ export default defineComponent({
name: "TechnicalView", name: "TechnicalView",
components: {ChangelogComponent}, components: {SaveManagerComponent, ChangelogComponent},
}) })
</script> </script>