Compare commits

..

No commits in common. "8325edcae195d7e870f5825436ace61b7d4b4446" and "545f8c6643222474ef5f1a3017e43363a7a8aa53" have entirely different histories.

19 changed files with 1342 additions and 286 deletions

320
Cargo.lock generated
View File

@ -17,12 +17,6 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "adler2"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
[[package]] [[package]]
name = "ahash" name = "ahash"
version = "0.4.8" version = "0.4.8"
@ -160,19 +154,18 @@ checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a"
[[package]] [[package]]
name = "arrayvec" name = "arrayvec"
version = "0.7.6" version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
[[package]] [[package]]
name = "assets_manager" name = "assets_manager"
version = "0.12.1" version = "0.11.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eadb8d5c3ec796630a35133c038842b02bcfc2a8a324349fc24fd6db5d679474" checksum = "b4dde42f7d78f1a1d0149ac8526e21c6c849090ce6aa191ae94b90b0cb2e4aed"
dependencies = [ dependencies = [
"ahash 0.8.11", "ahash 0.8.11",
"bincode", "bincode",
"hashbrown 0.14.5",
"log", "log",
"ron", "ron",
"serde", "serde",
@ -193,13 +186,13 @@ dependencies = [
[[package]] [[package]]
name = "async-trait" name = "async-trait"
version = "0.1.82" version = "0.1.81"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -260,7 +253,7 @@ dependencies = [
"cc", "cc",
"cfg-if", "cfg-if",
"libc", "libc",
"miniz_oxide 0.7.4", "miniz_oxide",
"object", "object",
"rustc-demangle", "rustc-demangle",
] ]
@ -341,9 +334,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
[[package]] [[package]]
name = "bytemuck" name = "bytemuck"
version = "1.17.1" version = "1.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83"
[[package]] [[package]]
name = "byteorder" name = "byteorder"
@ -365,12 +358,9 @@ checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.1.15" version = "1.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549"
dependencies = [
"shlex",
]
[[package]] [[package]]
name = "cesu8" name = "cesu8"
@ -449,9 +439,9 @@ dependencies = [
[[package]] [[package]]
name = "constant_time_eq" name = "constant_time_eq"
version = "0.3.1" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
[[package]] [[package]]
name = "core-foundation" name = "core-foundation"
@ -465,15 +455,15 @@ dependencies = [
[[package]] [[package]]
name = "core-foundation-sys" name = "core-foundation-sys"
version = "0.8.7" version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
[[package]] [[package]]
name = "cpufeatures" name = "cpufeatures"
version = "0.2.13" version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
dependencies = [ dependencies = [
"libc", "libc",
] ]
@ -563,7 +553,7 @@ checksum = "1234e1717066d3c71dcf89b75e7b586299e41204d361db56ec51e6ded5014279"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -586,7 +576,7 @@ dependencies = [
"ident_case", "ident_case",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -597,7 +587,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
dependencies = [ dependencies = [
"darling_core", "darling_core",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -651,7 +641,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -699,7 +689,7 @@ dependencies = [
"heck 0.4.1", "heck 0.4.1",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -720,7 +710,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -741,7 +731,7 @@ dependencies = [
"darling", "darling",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -818,12 +808,12 @@ dependencies = [
[[package]] [[package]]
name = "flate2" name = "flate2"
version = "1.0.33" version = "1.0.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920"
dependencies = [ dependencies = [
"crc32fast", "crc32fast",
"miniz_oxide 0.8.0", "miniz_oxide",
] ]
[[package]] [[package]]
@ -944,7 +934,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -988,11 +978,11 @@ dependencies = [
[[package]] [[package]]
name = "generator" name = "generator"
version = "0.8.3" version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbb949699c3e4df3a183b1d2142cb24277057055ed23c68ed58894f76c517223" checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e"
dependencies = [ dependencies = [
"cfg-if", "cc",
"libc", "libc",
"log", "log",
"rustversion", "rustversion",
@ -1261,7 +1251,7 @@ dependencies = [
"iana-time-zone-haiku", "iana-time-zone-haiku",
"js-sys", "js-sys",
"wasm-bindgen", "wasm-bindgen",
"windows-core 0.52.0", "windows-core",
] ]
[[package]] [[package]]
@ -1315,9 +1305,9 @@ dependencies = [
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.5.0" version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown 0.14.5", "hashbrown 0.14.5",
@ -1372,6 +1362,15 @@ version = "1.70.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
[[package]]
name = "itertools"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
dependencies = [
"either",
]
[[package]] [[package]]
name = "itertools" name = "itertools"
version = "0.13.0" version = "0.13.0"
@ -1409,18 +1408,18 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.70" version = "0.3.69"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
dependencies = [ dependencies = [
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]] [[package]]
name = "kiddo" name = "kiddo"
version = "4.2.1" version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60c5fcd3044b774e2c80a502b2387b75d1baa95e99b2bceeb5db00f2e2d27fe9" checksum = "9d2f8d9e1bc7c6919ad2cdc83472a9a4b5ed2ea2c5392c9514fdf958a7920f9a"
dependencies = [ dependencies = [
"az", "az",
"divrem", "divrem",
@ -1429,7 +1428,7 @@ dependencies = [
"fixed", "fixed",
"generator", "generator",
"init_with", "init_with",
"itertools", "itertools 0.12.1",
"log", "log",
"num-traits", "num-traits",
"ordered-float", "ordered-float",
@ -1447,9 +1446,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.158" version = "0.2.155"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
[[package]] [[package]]
name = "libredox" name = "libredox"
@ -1549,20 +1548,11 @@ dependencies = [
"simd-adler32", "simd-adler32",
] ]
[[package]]
name = "miniz_oxide"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
dependencies = [
"adler2",
]
[[package]] [[package]]
name = "mio" name = "mio"
version = "1.0.2" version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4"
dependencies = [ dependencies = [
"hermit-abi", "hermit-abi",
"libc", "libc",
@ -1663,7 +1653,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -1718,9 +1708,9 @@ dependencies = [
[[package]] [[package]]
name = "object" name = "object"
version = "0.36.4" version = "0.36.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]
@ -1857,7 +1847,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -1882,7 +1872,7 @@ dependencies = [
"crc32fast", "crc32fast",
"fdeflate", "fdeflate",
"flate2", "flate2",
"miniz_oxide 0.7.4", "miniz_oxide",
] ]
[[package]] [[package]]
@ -1986,9 +1976,9 @@ dependencies = [
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.37" version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
@ -2069,9 +2059,9 @@ dependencies = [
[[package]] [[package]]
name = "redox_users" name = "redox_users"
version = "0.4.6" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891"
dependencies = [ dependencies = [
"getrandom", "getrandom",
"libredox", "libredox",
@ -2181,9 +2171,9 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152"
[[package]] [[package]]
name = "rustc_version" name = "rustc_version"
version = "0.4.1" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
dependencies = [ dependencies = [
"semver", "semver",
] ]
@ -2204,9 +2194,9 @@ dependencies = [
[[package]] [[package]]
name = "rustls-native-certs" name = "rustls-native-certs"
version = "0.7.3" version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba"
dependencies = [ dependencies = [
"openssl-probe", "openssl-probe",
"rustls-pemfile", "rustls-pemfile",
@ -2233,9 +2223,9 @@ checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0"
[[package]] [[package]]
name = "rustls-platform-verifier" name = "rustls-platform-verifier"
version = "0.3.4" version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" checksum = "93bda3f493b9abe5b93b3e7e3ecde0df292f2bd28c0296b90586ee0055ff5123"
dependencies = [ dependencies = [
"core-foundation", "core-foundation",
"core-foundation-sys", "core-foundation-sys",
@ -2260,9 +2250,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
[[package]] [[package]]
name = "rustls-webpki" name = "rustls-webpki"
version = "0.102.7" version = "0.102.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e"
dependencies = [ dependencies = [
"ring", "ring",
"rustls-pki-types", "rustls-pki-types",
@ -2352,29 +2342,29 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.209" version = "1.0.205"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.209" version = "1.0.205"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
name = "serde_json" name = "serde_json"
version = "1.0.127" version = "1.0.122"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da"
dependencies = [ dependencies = [
"itoa", "itoa",
"memchr", "memchr",
@ -2390,7 +2380,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -2422,12 +2412,6 @@ dependencies = [
"lazy_static", "lazy_static",
] ]
[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]] [[package]]
name = "shred" name = "shred"
version = "0.16.1" version = "0.16.1"
@ -2581,7 +2565,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"rustversion", "rustversion",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -2609,9 +2593,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.77" version = "2.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -2641,7 +2625,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -2689,9 +2673,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]] [[package]]
name = "tokio" name = "tokio"
version = "1.40.0" version = "1.39.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1"
dependencies = [ dependencies = [
"backtrace", "backtrace",
"bytes", "bytes",
@ -2711,7 +2695,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -2787,15 +2771,15 @@ dependencies = [
[[package]] [[package]]
name = "tower-layer" name = "tower-layer"
version = "0.3.3" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
[[package]] [[package]]
name = "tower-service" name = "tower-service"
version = "0.3.3" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]] [[package]]
name = "tracing" name = "tracing"
@ -2817,7 +2801,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]
@ -3019,7 +3003,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-client" name = "veloren-client"
version = "0.16.0" version = "0.16.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"authc", "authc",
"byteorder", "byteorder",
@ -3045,7 +3029,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-client-i18n" name = "veloren-client-i18n"
version = "0.13.0" version = "0.13.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"deunicode", "deunicode",
"fluent", "fluent",
@ -3063,7 +3047,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-common" name = "veloren-common"
version = "0.10.0" version = "0.10.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"approx", "approx",
"bitflags 2.6.0", "bitflags 2.6.0",
@ -3075,7 +3059,7 @@ dependencies = [
"fxhash", "fxhash",
"hashbrown 0.14.5", "hashbrown 0.14.5",
"indexmap", "indexmap",
"itertools", "itertools 0.13.0",
"lazy_static", "lazy_static",
"num-derive", "num-derive",
"num-traits", "num-traits",
@ -3103,7 +3087,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-common-assets" name = "veloren-common-assets"
version = "0.10.0" version = "0.10.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"assets_manager", "assets_manager",
"dot_vox", "dot_vox",
@ -3118,7 +3102,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-common-base" name = "veloren-common-base"
version = "0.10.0" version = "0.10.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"directories-next", "directories-next",
"tracing", "tracing",
@ -3127,7 +3111,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-common-ecs" name = "veloren-common-ecs"
version = "0.10.0" version = "0.10.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"specs", "specs",
"tracing", "tracing",
@ -3137,7 +3121,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-common-i18n" name = "veloren-common-i18n"
version = "0.1.0" version = "0.1.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"hashbrown 0.14.5", "hashbrown 0.14.5",
"rand", "rand",
@ -3147,7 +3131,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-common-net" name = "veloren-common-net"
version = "0.10.0" version = "0.10.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"bincode", "bincode",
"flate2", "flate2",
@ -3165,7 +3149,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-common-state" name = "veloren-common-state"
version = "0.10.0" version = "0.10.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"bytes", "bytes",
@ -3187,9 +3171,9 @@ dependencies = [
[[package]] [[package]]
name = "veloren-common-systems" name = "veloren-common-systems"
version = "0.10.0" version = "0.10.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"itertools", "itertools 0.13.0",
"ordered-float", "ordered-float",
"rand", "rand",
"rayon", "rayon",
@ -3205,7 +3189,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-network" name = "veloren-network"
version = "0.3.0" version = "0.3.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"async-channel", "async-channel",
"async-trait", "async-trait",
@ -3230,7 +3214,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-network-protocol" name = "veloren-network-protocol"
version = "0.6.1" version = "0.6.1"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"bitflags 2.6.0", "bitflags 2.6.0",
@ -3244,7 +3228,7 @@ dependencies = [
[[package]] [[package]]
name = "veloren-world" name = "veloren-world"
version = "0.10.0" version = "0.10.0"
source = "git+https://gitlab.com/veloren/veloren?branch=master#2c1a141fd83ad572553e06a8bf4248d4c7fbedbc" source = "git+https://gitlab.com/veloren/veloren?branch=master#2365209c126afede9b55458c07913bff33947abc"
dependencies = [ dependencies = [
"arr_macro", "arr_macro",
"bincode", "bincode",
@ -3255,7 +3239,7 @@ dependencies = [
"fxhash", "fxhash",
"hashbrown 0.14.5", "hashbrown 0.14.5",
"image", "image",
"itertools", "itertools 0.13.0",
"kiddo", "kiddo",
"lazy_static", "lazy_static",
"noise", "noise",
@ -3307,35 +3291,34 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]] [[package]]
name = "wasm-bindgen" name = "wasm-bindgen"
version = "0.2.93" version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"once_cell",
"wasm-bindgen-macro", "wasm-bindgen-macro",
] ]
[[package]] [[package]]
name = "wasm-bindgen-backend" name = "wasm-bindgen-backend"
version = "0.2.93" version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
dependencies = [ dependencies = [
"bumpalo", "bumpalo",
"log", "log",
"once_cell", "once_cell",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
[[package]] [[package]]
name = "wasm-bindgen-macro" name = "wasm-bindgen-macro"
version = "0.2.93" version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
dependencies = [ dependencies = [
"quote", "quote",
"wasm-bindgen-macro-support", "wasm-bindgen-macro-support",
@ -3343,22 +3326,22 @@ dependencies = [
[[package]] [[package]]
name = "wasm-bindgen-macro-support" name = "wasm-bindgen-macro-support"
version = "0.2.93" version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
"wasm-bindgen-backend", "wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
[[package]] [[package]]
name = "wasm-bindgen-shared" name = "wasm-bindgen-shared"
version = "0.2.93" version = "0.2.92"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
[[package]] [[package]]
name = "wavefront" name = "wavefront"
@ -3371,9 +3354,9 @@ dependencies = [
[[package]] [[package]]
name = "webpki-roots" name = "webpki-roots"
version = "0.26.5" version = "0.26.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd"
dependencies = [ dependencies = [
"rustls-pki-types", "rustls-pki-types",
] ]
@ -3417,12 +3400,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]] [[package]]
name = "windows" name = "windows"
version = "0.58.0" version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
dependencies = [ dependencies = [
"windows-core 0.58.0", "windows-targets 0.48.5",
"windows-targets 0.52.6",
] ]
[[package]] [[package]]
@ -3434,60 +3416,6 @@ dependencies = [
"windows-targets 0.52.6", "windows-targets 0.52.6",
] ]
[[package]]
name = "windows-core"
version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
dependencies = [
"windows-implement",
"windows-interface",
"windows-result",
"windows-strings",
"windows-targets 0.52.6",
]
[[package]]
name = "windows-implement"
version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.77",
]
[[package]]
name = "windows-interface"
version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.77",
]
[[package]]
name = "windows-result"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "windows-strings"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
dependencies = [
"windows-result",
"windows-targets 0.52.6",
]
[[package]] [[package]]
name = "windows-sys" name = "windows-sys"
version = "0.48.0" version = "0.48.0"
@ -3682,7 +3610,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.77", "syn 2.0.72",
] ]
[[package]] [[package]]

View File

@ -33,13 +33,12 @@ The bot is able to respond to the following commands, which must be sent via "/t
search term. search term.
- `admin_access`: Admin-only, prompts the bot to send a trade invite to the sender, after which it - `admin_access`: Admin-only, prompts the bot to send a trade invite to the sender, after which it
will give away and accept any items until the trade ends. will give away and accept any items until the trade ends.
- `announce`: Admin-only, sends the announcement message to "/region". This will reset the - `announce`: Admin-only, sends the announcement message to "/world". This will reset the
announcement timer to 45 minutes. announcement timer to 45 minutes.
- `location`: Returns the bot's current town or, if it is not in a town, its current position.
- `sort [count (optional)]`: Admin-only, sorts the inventory once or the given number of times. - `sort [count (optional)]`: Admin-only, sorts the inventory once or the given number of times.
- `pos [x] [y] [z]`: Admin-only, sets the bot's desired position where it will try to stand (must - `pos [x] [y] [z]`: Admin-only, sets the bot's desired position where it will try to stand (must
be close to the bot's current position). be close to the bot's current position)
- `ori [0-360]`: Admin-only, sets the bot's desired orientation (or facing direction). - `ori [0-360]`: Admin-only, sets the bot's desired orientation (or facing direction)
## Prerequisites ## Prerequisites
@ -95,8 +94,10 @@ position = [0, 0, 0]
# Its orientation can be changed in-game with the "ori" command. # Its orientation can be changed in-game with the "ori" command.
orientation = 0 orientation = 0
# Optional. Announcements are sent every 45 minutes. If not set, the bot will not make announcements. # Optional. Announcements are sent every 45 minutes. Use {location} to insert the bot's current
announcement = "I love cheese!" # location. If not set, the bot will not send /world announcements but will still send /region
# announcements with usage instructions.
announcement = "I love cheese! I am at {location}."
# The buy_prices and sell_prices tables are required. The keys are item definition IDs and the # The buy_prices and sell_prices tables are required. The keys are item definition IDs and the
# values are the price in coins. You may type in-game "/give_item common.items." and press Tab to # values are the price in coins. You may type in-game "/give_item common.items." and press Tab to
@ -142,17 +143,6 @@ podman build . -t trade_bot
Then follow the [above](#running) steps with the tag "trade_bot" instead of Then follow the [above](#running) steps with the tag "trade_bot" instead of
"git.jeffa.io/jeff/trade_bot". "git.jeffa.io/jeff/trade_bot".
## Changelog
- 9/2/2024:
- Added the "location" command.
- Removed the "{location}" feature from the announcement message. Announcements are now sent to
"/region" so this feature is now used by the "location" command.
- Changed announcements to be sent to "/region" instead of "/world". The moderators on the official
server have asked for this, so please don't run an old version to circumvent the change.
- Removed the "Ouch!" and "That hurt!" messages when the bot is attacked. The moderators have also
asked for this.
## License ## License
This project is licensed under the GPL-3.0 license. See the [LICENSE](LICENSE) file for details. This project is licensed under the GPL-3.0 license. See the [LICENSE](LICENSE) file for details.

View File

@ -0,0 +1,35 @@
## Monster descriptions, used ONLY in npc-speech-tell_monster
body-npc-speech-generic = some creature
body-npc-speech-biped_large-ogre-male = an ogre
body-npc-speech-biped_large-ogre-female = an ogre
body-npc-speech-biped_large-cyclops = a cyclops
body-npc-speech-biped_large-wendigo = a wendigo
body-npc-speech-biped_large-werewolf = a werewolf
body-npc-speech-biped_large-cave_troll = a cave troll
body-npc-speech-biped_large-mountain_troll = a mountain troll
body-npc-speech-biped_large-swamp_troll = a swamp troll
body-npc-speech-biped_large-blue_oni = a blue oni
body-npc-speech-biped_large-red_oni = a red oni
body-npc-speech-biped_large-tursus = a tursus
body-npc-speech-biped_large-dullahan = a dullahan
body-npc-speech-biped_large-occult_saurok = an occult saurok
body-npc-speech-biped_large-mighty_saurok = a mighty saurok
body-npc-speech-biped_large-sly_saurok = a sly saurok
body-npc-speech-biped_large-mindflayer = a mindflayer
body-npc-speech-biped_large-minotaur = a minotaur
body-npc-speech-biped_large-tidal_warrior = a tidal warrior
body-npc-speech-biped_large-yeti = a yeti
body-npc-speech-biped_large-harvester = a harvester
body-npc-speech-biped_large-cultist_warlord = a cultist warlord
body-npc-speech-biped_large-cultist_warlock = a cultist warlock
body-npc-speech-biped_large-husk_brute = a husk brute
body-npc-speech-biped_large-gigas_frost = a gigas frost
body-npc-speech-biped_large-adlet_elder = an adlet elder
body-npc-speech-biped_large-sea_bishop = a sea bishop
body-npc-speech-biped_large-haniwa_general = a haniwa general
body-npc-speech-biped_large-terracotta_besieger = a terracotta besieger
body-npc-speech-biped_large-terracotta_demolisher = a terracotta demolisher
body-npc-speech-biped_large-terracotta_punisher = a terracotta punisher
body-npc-speech-biped_large-terracotta_pursuer = a terracotta pursuer
body-npc-speech-biped_large-cursekeeper = a terracotta pursuer

View File

@ -0,0 +1,2 @@
esc_menu-logout = Logout
esc_menu-quit_game = Quit Game

View File

@ -0,0 +1,454 @@
## Internal terms, currently only used in zh-Hans.
## If we remove them here, they also get auto-removed in zh-Hans,
## so please keep them, even when not used in English file.
## See https://github.com/WeblateOrg/weblate/issues/9895
-heavy_stance = ""
-agile_stance = ""
-defensive_stance = ""
-crippling_stance = ""
-cleaving_stance = ""
-basic_state = ""
-heavy_state = ""
-agile_state = ""
-defensive_state = ""
-crippling_state = ""
-cleaving_state = ""
-double_slash = ""
-modified_depending_stance = ""
-crescent_slash = ""
-fell_strike = ""
-skewer = ""
-cascade = ""
-cross_cut = ""
-requires_moderate_combo = ""
-enter_stance = ""
-require_stance = ""
## Debug abilities
common-abilities-debug-possess = Possessing Arrow
.desc = Shoots a poisonous arrow. Lets you control your target.
common-abilities-debug-evolve = Evolve
.desc = You become your better self.
common-abilities-debug-glide_boost = Vroom
.desc = Gives you the force to reach the sky
common-abilities-debug-glide_speeder = Vroom
.desc = Gives you the force to reach wherever your eyes look
## Hotbar abilities
# Not-yet reworked weapon abilities
common-abilities-hammer-leap = Smash of Doom
.desc = An AOE attack with knockback. Leaps to position of cursor.
common-abilities-bow-shotgun = Burst
.desc = Launches a burst of arrows
common-abilities-staff-fireshockwave = Ring of Fire
.desc = Ignites the ground with fiery shockwave.
common-abilities-sceptre-wardingaura = Warding Aura
.desc = Wards your allies against enemy attacks.
## Sword abilities
veloren-core-pseudo_abilities-sword-heavy_stance = Heavy Stance
.desc = Attacks in this stance can stagger enemies and deal more damage to staggered enemies but are slower.
veloren-core-pseudo_abilities-sword-agile_stance = Agile Stance
.desc = Attacks are faster but weaker in this stance.
veloren-core-pseudo_abilities-sword-defensive_stance = Defensive Stance
.desc = Attacks in this stance can act as either a weak block or a parry.
veloren-core-pseudo_abilities-sword-crippling_stance = Crippling Stance
.desc = Attacks in this stance create or worsen lasting injuries.
veloren-core-pseudo_abilities-sword-cleaving_stance = Cleaving Stance
.desc = Attacks in this stance can hit multiple enemies.
veloren-core-pseudo_abilities-sword-double_slash = Double Slash
.desc = A two-hit combo.
common-abilities-sword-basic_double_slash = Basic Double Slash
.desc = A basic two-hit combo.
common-abilities-sword-heavy_double_slash = Heavy Double Slash
.desc = A slower two-hit combo that can stagger.
common-abilities-sword-agile_double_slash = Agile Double Slash
.desc = A fast two-hit combo with lighter strikes.
common-abilities-sword-defensive_double_slash = Defensive Double Slash
.desc = A two-hit combo that reduces the impact of enemy strikes.
common-abilities-sword-crippling_double_slash = Crippling Double Slash
.desc = A two-hit combo that can prolong an enemy's bleeding.
common-abilities-sword-cleaving_double_slash = Cleaving Double Slash
.desc = A two-hit combo that can cleave through multiple enemies.
veloren-core-pseudo_abilities-sword-secondary_ability = Secondary Sword Ability
.desc = The ability bound to secondary attack key.
common-abilities-sword-basic_thrust = Basic Thrust
.desc = Charging the thrust will make it more powerful.
common-abilities-sword-heavy_slam = Heavy Slam
.desc = A strong overhead slash that can be charged to be more staggering.
common-abilities-sword-agile_perforate = Perforate
.desc = A rapid flurry of light attacks.
common-abilities-sword-agile_dual_perforate = Perforate
.desc = A rapid flurry of light attacks with both swords.
common-abilities-sword-defensive_vital_jab = Defensive Vital Jab
.desc = A quickly charged jab that does more damage against parried foes.
common-abilities-sword-crippling_deep_rend = Deep Rend
.desc = A strike aimed at an already open wound, deals more damage to bleeding enemies.
common-abilities-sword-cleaving_spiral_slash = Spiral Slash
.desc = Sweep your blade fully around you to hit anyone nearby.
common-abilities-sword-cleaving_dual_spiral_slash = Spiral Slash
.desc = Sweep both of your blades fully around you to hit anyone nearby.
veloren-core-pseudo_abilities-sword-crescent_slash = Crescent Slash
.desc =
An upwards diagonal slash.
This skill changes depending on your adopted stance.
common-abilities-sword-basic_crescent_slash = Basic Crescent Slash
.desc = A basic, upwards diagonal slash.
common-abilities-sword-heavy_crescent_slash = Heavy Crescent Slash
.desc = An upwards diagonal slash that can stagger.
common-abilities-sword-agile_crescent_slash = Agile Crescent Slash
.desc = A light, upwards diagonal slash.
common-abilities-sword-defensive_crescent_slash = Defensive Crescent Slash
.desc = A parrying, upwards diagonal slash.
common-abilities-sword-crippling_crescent_slash = Crippling Crescent Slash
.desc = An upwards diagonal slash that can bleed.
common-abilities-sword-cleaving_crescent_slash = Cleaving Crescent Slash
.desc = An upwards diagonal slash that can cleave through enemies.
veloren-core-pseudo_abilities-sword-fell_strike = Fell Strike
.desc =
A quick strong slash.
This skill changes depending on your adopted stance.
common-abilities-sword-basic_fell_strike = Basic Fell Strike
.desc = A basic, quick strong slash.
common-abilities-sword-heavy_fell_strike = Heavy Fell Strike
.desc = A strong slash that can stagger.
common-abilities-sword-agile_fell_strike = Agile Fell Strike
.desc = A very quick strong slash.
common-abilities-sword-defensive_fell_strike = Defensive Fell Strike
.desc = A parrying, quick strong slash.
common-abilities-sword-crippling_fell_strike = Crippling Fell Strike
.desc = A quick strong slash that can bleed.
common-abilities-sword-cleaving_fell_strike = Cleaving Fell Strike
.desc = A quick strong slash that can cleave through enemies.
veloren-core-pseudo_abilities-sword-skewer = Skewer
.desc =
A stabbing lunge.
This skill changes depending on your adopted stance.
common-abilities-sword-basic_skewer = Basic Skewer
.desc = A basic, stabbing lunge.
common-abilities-sword-heavy_skewer = Heavy Skewer
.desc = A stabbing lunge that can stagger.
common-abilities-sword-agile_skewer = Agile Skewer
.desc = A quick, stabbing lunge.
common-abilities-sword-defensive_skewer = Defensive Skewer
.desc = A parrying, stabbing lunge.
common-abilities-sword-crippling_skewer = Crippling Skewer
.desc = A stabbing lunge that can bleed.
common-abilities-sword-cleaving_skewer = Cleaving Skewer
.desc = A stabbing lunge that can cleave through enemies.
veloren-core-pseudo_abilities-sword-cascade = Cascade
.desc =
An overhead slash.
This skill changes depending on your adopted stance.
common-abilities-sword-basic_cascade = Basic Cascade
.desc = A basic, overhead slash.
common-abilities-sword-heavy_cascade = Heavy Cascade
.desc = An overhead slash that can stagger.
common-abilities-sword-agile_cascade = Agile Cascade
.desc = A quick, overhead slash.
common-abilities-sword-defensive_cascade = Defensive Cascade
.desc = A parrying, overhead slash.
common-abilities-sword-crippling_cascade = Crippling Cascade
.desc = An overhead slash that can bleed.
common-abilities-sword-cleaving_cascade = Cleaving Cascade
.desc = An overhead slash that can cleave through enemies.
veloren-core-pseudo_abilities-sword-cross_cut = Cross Cut
.desc =
A right and left slash.
This skill changes depending on your adopted stance.
common-abilities-sword-basic_cross_cut = Basic Cross Cut
.desc = A basic right and left slash.
common-abilities-sword-heavy_cross_cut = Heavy Cross Cut
.desc = A right and left slash that can each stagger.
common-abilities-sword-agile_cross_cut = Agile Cross Cut
.desc = A quick right and left slash.
common-abilities-sword-defensive_cross_cut = Defensive Cross Cut
.desc = A parrying right and left slash.
common-abilities-sword-crippling_cross_cut = Crippling Cross Cut
.desc = A right and left slash that can bleed.
common-abilities-sword-cleaving_cross_cut = Cleaving Cross Cut
.desc = A right and left slash which cleave through enemies.
common-abilities-sword-basic_dual_cross_cut = Basic Cross Cut
.desc = A simultaneous basic right and left slash.
common-abilities-sword-heavy_dual_cross_cut = Heavy Cross Cut
.desc = A simultaneous right and left slash that can each stagger.
common-abilities-sword-agile_dual_cross_cut = Agile Cross Cut
.desc = A simultaneous quick right and left slash.
common-abilities-sword-defensive_dual_cross_cut = Defensive Cross Cut
.desc = A simultaneous parrying right and left slash.
common-abilities-sword-crippling_dual_cross_cut = Crippling Cross Cut
.desc = A simultaneous right and left slash that can bleed.
common-abilities-sword-cleaving_dual_cross_cut = Cleaving Cross Cut
.desc = A simultaneous right and left slash which cleave through enemies.
veloren-core-pseudo_abilities-sword-finisher = Finisher
.desc =
An ability that consumes combo and is meant to end a fight.
This skill changes depending on your adopted stance.
common-abilities-sword-basic_mighty_strike = Mighty Strike
.desc =
A simple, powerful slash.
Requires a moderate amount of combo to use.
common-abilities-sword-heavy_guillotine = Guillotine
.desc =
A strong cleave that will likely stagger what it doesn't kill.
Requires a moderate amount of combo to use.
common-abilities-sword-agile_hundred_cuts = Hundred Cuts
.desc =
Many very rapid slashes on a target.
Requires a moderate amount of combo to use.
common-abilities-sword-defensive_counter = Counter
.desc =
A rapidly launched attack that deals substantially more damage to a parried foe.
Requires a moderate amount of combo to use.
common-abilities-sword-crippling_mutilate = Mutilate
.desc =
Mutilate your foe by sawing through their injuries, deals more damage to bleeding foes.
Requires a moderate amount of combo to use.
common-abilities-sword-cleaving_bladestorm = Bladestorm
.desc =
Decimate your enemies with multiple cyclic swings of your sword.
Requires a moderate amount of combo to use.
common-abilities-sword-cleaving_dual_bladestorm = Bladestorm
.desc =
Decimate your enemies with multiple cyclic swings of both of your swords.
Requires a moderate amount of combo to use.
common-abilities-sword-heavy_sweep = Heavy Sweep
.desc =
A heavy, wide, sweeping strike that deals more damage to a staggered enemy.
Enters heavy stance.
common-abilities-sword-heavy_pommel_strike = Pommel Strike
.desc =
Concuss your foe with a blunt strike to the head.
Enters heavy stance.
common-abilities-sword-agile_quick_draw = Quick Draw
.desc =
Dash forward as you draw your blade for a quick attack.
Enters agile stance.
common-abilities-sword-agile_feint = Feint
.desc =
Step to the side then back before striking.
Enters agile stance.
common-abilities-sword-defensive_riposte = Riposte
.desc =
Parry a strike before instantly counter-attacking.
Enters defensive stance.
common-abilities-sword-defensive_disengage = Disengage
.desc =
Retreat backwards a step after striking.
Enters defensive stance.
common-abilities-sword-crippling_gouge = Gouge
.desc =
Inflict a lasting wound on your enemy that will continue to bleed.
Enters crippling stance.
common-abilities-sword-crippling_hamstring = Hamstring
.desc =
Injure the tendons of your foe, leaving them less maneuverable.
Enters crippling stance.
common-abilities-sword-cleaving_whirlwind_slice = Whirlwind Slice
.desc =
Strike all surrounding enemies with circular attacks.
Enters cleaving stance.
common-abilities-sword-cleaving_dual_whirlwind_slice = Whirlwind Slice
.desc =
Strike all surrounding enemies with circular attacks using both of your swords.
Enters cleaving stance.
common-abilities-sword-cleaving_earth_splitter = Earth Splitter
.desc =
Split the earth, if used while falling will have a much stronger impact.
Enters cleaving stance.
common-abilities-sword-heavy_fortitude = Fortitude
.desc =
Increases stagger resistance and as you take more damage your attacks will be more staggering.
Requires heavy stance.
common-abilities-sword-heavy_pillar_thrust = Pillar Thrust
.desc =
Stab your sword down through the enemy, all the way into the ground, is more powerful if used while falling.
Requires heavy stance.
common-abilities-sword-agile_dancing_edge = Dancing Edge
.desc =
Move and attack more swiftly.
Requires agile stance.
common-abilities-sword-agile_flurry = Flurry
.desc =
Multiple rapid stabs.
Requires agile stance.
common-abilities-sword-agile_dual_flurry = Flurry
.desc =
Multiple rapid stabs with both swords.
Requires agile stance.
common-abilities-sword-defensive_stalwart_sword = Stalwart Sword
.desc =
Shrug off the brunt of attacks, incoming damage is reduced.
Requires defensive stance.
common-abilities-sword-defensive_deflect = Deflect
.desc =
A swift enough maneuver to even block projectiles.
Requires defensive stance.
common-abilities-sword-crippling_eviscerate = Eviscerate
.desc =
Shreds wounds further, deals more damage to crippled enemies.
Requires crippling stance.
common-abilities-sword-crippling_bloody_gash = Bloody Gash
.desc =
Cruelly strike an already bleeding wound, does more damage to bleeding enemies.
Requires crippling stance.
common-abilities-sword-cleaving_blade_fever = Blade Fever
.desc =
Attack more recklessly, increasing the power of your strikes while leaving yourself open to incoming attacks.
Requires cleaving stance.
common-abilities-sword-cleaving_sky_splitter = Sky Splitter
.desc =
A powerful strike that purportedly can even split the sky, but will split through enemies.
Requires cleaving stance.
## Axe abilities
common-abilities-axe-triple_chop = Triple Chop
.desc = Three quick strikes.
common-abilities-axe-cleave = Cleave
.desc = A downwards chop that can build multiple combo.
common-abilities-axe-brutal_swing = Brutal Swing
.desc = A spinning cleave around you.
common-abilities-axe-berserk = Berserk
.desc = Increases your strength at the cost of leaving you vulnerable.
common-abilities-axe-rising_tide = Rising Tide
.desc = An upwards strike that greatly increases combo.
common-abilities-axe-savage_sense = Savage Sense
.desc = Identify a vital point on your target, ensuring your next strike critically damages them.
common-abilities-axe-adrenaline_rush = Adrenaline Rush
.desc =
Consume all your combo to replenish your energy.
Scales with combo on activation, consumes all combo.
common-abilities-axe-execute = Execute
.desc =
A devastating strike often known to be fatal.
Requires 30 combo to use.
Automatically upgrades to maelstrom at 50 combo if unlocked.
common-abilities-axe-maelstrom = Maelstrom
.desc =
Strike everything in your vicinity with a devastating, spinning strike.
Automatically upgrades from execute at 50 combo.
common-abilities-axe-rake = Rake
.desc = Drag your axe across your foe, inducing bleeding.
common-abilities-axe-bloodfeast = Bloodfeast
.desc = Your axe thirsts for the blood of your enemies, replenishing you with each strike against a bleeding enemy.
common-abilities-axe-fierce_raze = Fierce Raze
.desc = A rapid flurry of strikes on your foe.
common-abilities-axe-dual_fierce_raze = Fierce Raze
.desc = A rapid flurry of strikes on your foe using both of your axes.
common-abilities-axe-furor = Furor
.desc = As your fury rises, your strikes generate more combo.
common-abilities-axe-fracture = Fracture
.desc =
A crippling blow that hampers your foe's movement.
Scales with combo on activation, consumes half of combo.
common-abilities-axe-lacerate = Lacerate
.desc =
Flay your target, causing their lifeblood to flow out.
Requires 30 combo to use.
Automatically upgrades to riptide at 50 combo if unlocked.
common-abilities-axe-riptide = Riptide
.desc =
Flay everything nearby, parting them from their blood.
Automatically upgrades from lacerate at 50 combo.
common-abilities-axe-skull_bash = Skullbash
.desc = A strike with the flat of your axe that can stagger.
common-abilities-axe-sunder = Sunder
.desc = By changing your grip, you become able to bypass your enemy's armor while restoring your energy more effectively.
common-abilities-axe-plunder = Plunder
.desc = Quickly step towards your foe, robbing them of their balance with a strike.
common-abilities-axe-defiance = Defiance
.desc = Stare death in the eye longer as you make yourself resistant to both staggers and death.
common-abilities-axe-keelhaul = Keelhaul
.desc =
Hook your opponent to pull them closer towards you.
Scales with combo on activation, consumes half of combo.
common-abilities-axe-bulkhead = Bulkhead
.desc =
A heavy swing that some say can even stagger titans.
Requires 30 combo to use.
Automatically upgrades to capsize at 50 combo if unlocked.
common-abilities-axe-capsize = Capsize
.desc =
Stagger everything nearby with a heavy spinning strike.
Automatically upgrades from bulkhead at 50 combo.
# Hammer abilities
common-abilities-hammer-solid_smash = Solid Smash
.desc =
A solid smash, that'll hurt
common-abilities-hammer-wide_wallop = Wide Wallop
.desc =
Pull back and send them flying
common-abilities-hammer-scornful_swipe = Scornful Swipe
.desc =
Bolster your fortitude and stamina by taunting your enemies before striking at them. If you fall to an enemy they become empowered.
common-abilities-hammer-tremor = Tremor
.desc =
Strike the earth with enough force that the ground beneath your foes trembles.
common-abilities-hammer-vigorous_bash = Vigorous Bash
.desc =
Use the head of your hammer to quickly strike your foes, giving a surge of adrenaline if the target is off balance.
common-abilities-hammer-heavy_whorl = Heavy Whorl
.desc =
You strike all foes surrounding you with your hammer.
common-abilities-hammer-dual_heavy_whorl = Heavy Whorl
.desc =
You strike all foes surrounding you with your hammers.
common-abilities-hammer-intercept = Intercept
.desc =
Charge forward with your hammer throwing your weight behind your strike.
common-abilities-hammer-dual_intercept = Intercept
.desc =
Charge forward with your hammers throwing your weight behind your strike.
common-abilities-hammer-retaliate = Retaliate
.desc =
After blocking an attack, retaliate with a heavy strike back.
common-abilities-hammer-spine_cracker = Spine Cracker
.desc =
When you foe turns their back to you, strike them hard in the back, targeting the weak part of their spine.
common-abilities-hammer-breach = Breach
.desc =
Breach through your enemy's attempt at defense with a heavy strike from your hammer.
common-abilities-hammer-pile_driver = Pile Driver
.desc =
Strike your enemy into the ground, stopping their movement until they free their legs.
common-abilities-hammer-lung_pummel = Lung Pummel
.desc =
Swipe your hammer into your foe's side, winding them.
common-abilities-hammer-helm_crusher = Helm Crusher
.desc =
Bash your enemy's head with your hammer, concussing them.
common-abilities-hammer-iron_tempest = Iron Tempest
.desc =
Swing swiftly enough that your hammer becomes like a storm, scattering your enemies.
common-abilities-hammer-dual_iron_tempest = Iron Tempest
.desc =
Swing swiftly enough that your hammers becomes like a storm, scattering your enemies.
common-abilities-hammer-upheaval = Upheaval
.desc =
Slam your hammer into your foe, knocking them into the air and leaving them vulnerable to staggers.
common-abilities-hammer-dual_upheaval = Upheaval
.desc =
Slam your hammers into your foes, knocking them into the air and leaving them vulnerable to staggers.
common-abilities-hammer-rampart = Rampart
.desc =
Strike the ground, causing very mild tectonic uplift which protects your allies from attacks.
common-abilities-hammer-tenacity = Tenacity
.desc =
Hold yourself strong as you withstand attack after attack, managing to keep attacking all the while.
common-abilities-hammer-thunderclap = Thunderclap
.desc =
Unleash a devastating, adrenaline-fueled overhead strike against your foe.
common-abilities-hammer-seismic_shock = Seismic Shock
.desc =
After buildup up enough momentum in your hammer, strike the ground with enough force that it erupts outward, throwing your foes into the air.
common-abilities-hammer-earthshaker = Earthshaker
.desc =
Slam the head of your blood-soaked hammer into the ground, unleashing a shockwave that knocks the wind out of everyone around you.
common-abilities-hammer-judgement = Judgement
.desc =
Bring your hammer down on your foe with all your weight, potentially killing them outright if they are staggered.

View File

@ -0,0 +1,59 @@
hud-bag-inventory = { $playername }'s Inventory
hud-bag-stats_title = { $playername }'s Stats
hud-bag-armor = Armor
hud-bag-stats = Stats
hud-bag-head = Head
hud-bag-neck = Neck
hud-bag-tabard = Tabard
hud-bag-shoulders = Shoulders
hud-bag-chest = Chest
hud-bag-hands = Hands
hud-bag-lantern = Lantern
hud-bag-glider = Glider
hud-bag-belt = Belt
hud-bag-ring = Ring
hud-bag-back = Back
hud-bag-backpack = Backpack
hud-bag-legs = Legs
hud-bag-feet = Feet
hud-bag-mainhand = Mainhand
hud-bag-offhand = Offhand
hud-bag-inactive_mainhand = Inactive Mainhand
hud-bag-inactive_offhand = Inactive Offhand
hud-bag-swap_equipped_weapons_title = Swap equipped weapons
hud-bag-swap_equipped_weapons_desc = Press { $key }
hud-bag-bag = Bag
hud-bag-health = Health
hud-bag-energy = Energy
hud-bag-combat_rating = Combat Rating
hud-bag-protection = Protection
hud-bag-stun_res = Stun Resilience
hud-bag-stealth = Stealth
hud-bag-combat_rating_desc =
Calculated from your
equipment and health.
hud-bag-protection_desc = Damage reduction through armor.
hud-bag-stun_res_desc =
Resilience against being stunned by consecutive hits.
Regenerates like energy.
hud-bag-sort_by_name = Sort by Name
hud-bag-sort_by_quality = Sort by Quality
hud-bag-sort_by_category = Sort by Category
hud-bag-sort_by_tag = Sort by Tag
hud-bag-sort_by_quantity = Sort by Quantity
hud-bag-use_slot_equip_drop_items = { $slot_deficit ->
[1] Equipping this item will result in insufficient inventory space to hold the items in your inventory and 1 item will drop on the floor. Do you wish to continue?
*[other] Equipping this item will result in insufficient inventory space to hold the items in your inventory and { $slot_deficit } items will drop on the floor. Do you wish to continue?
}
hud-bag-use_slot_unequip_drop_items = { $slot_deficit ->
[1] Unequipping this item will result in insufficient inventory space to hold the items in your inventory and 1 item will drop on the floor. Do you wish to continue?
*[other] Unequipping this item will result in insufficient inventory space to hold the items in your inventory and { $slot_deficit } items will drop on the floor. Do you wish to continue?
}
hud-bag-swap_slots_drop_items = { $slot_deficit ->
[1] This will result in dropping 1 item on the ground. Are you sure?
*[other] This will result in dropping { $slot_deficit } items on the ground. Are you sure?
}
hud-bag-split_swap_slots_drop_items = { $slot_deficit ->
[1] This will result in dropping 1 item on the ground. Are you sure?
*[other] This will result in dropping { $slot_deficit } items on the ground. Are you sure?
}

View File

@ -0,0 +1,9 @@
character_window-character_name = Character name
character_window-character_stats =
Endurance
Fitness
Willpower
Protection

View File

@ -0,0 +1,91 @@
## Player events, $user_gender should be available
hud-chat-online_msg = [{ $name }] is online now.
hud-chat-offline_msg = [{ $name }] went offline.
hud-chat-goodbye = Goodbye!
hud-chat-connection_lost = Connection lost. Kicking in { $time } seconds.
## Player /tell messages, $user_gender should be available
hud-chat-tell-to = To [{ $alias }]: { $msg }
hud-chat-tell-from = From [{ $alias }]: { $msg }
## Npc /tell messages, no gender info, sadly
hud-chat-tell-to-npc = To [{ $alias }]: { $msg }
hud-chat-tell-from-npc = From [{ $alias }]: { $msg }
## Generic messages
hud-chat-message = [{ $alias }]: { $msg }
hud-chat-message-with-name = [{ $alias }] { $name }: { $msg }
hud-chat-message-in-group = ({ $group }) [{ $alias }]: { $msg }
hud-chat-message-in-group-with-name = ({ $group }) [{ $alias }] { $name }: { $msg }
## PvP Buff deaths, both $attacker_gender and $victim_gender are available
hud-chat-died_of_pvp_buff_msg =
.burning = [{ $victim }] died of: burning caused by [{ $attacker }]
.bleeding = [{ $victim }] died of: bleeding caused by [{ $attacker }]
.curse = [{ $victim }] died of: curse caused by [{ $attacker }]
.crippled = [{ $victim }] died of: crippled caused by [{ $attacker }]
.frozen = [{ $victim }] died of: frozen caused by [{ $attacker }]
.mysterious = [{ $victim }] died of: secret caused by [{ $attacker }]
## PvE Buff deaths, only $victim_gender is available
hud-chat-died_of_npc_buff_msg =
.burning = [{ $victim }] died of: burning caused by { $attacker }
.bleeding = [{ $victim }] died of: bleeding caused by { $attacker }
.curse = [{ $victim }] died of: curse caused by { $attacker }
.crippled = [{ $victim }] died of: crippled caused by { $attacker }
.frozen = [{ $victim }] died of: frozen caused by { $attacker }
.mysterious = [{ $victim }] died of: secret caused by { $attacker }
## Random Buff deaths, only $victim_gender is available
hud-chat-died_of_buff_nonexistent_msg =
.burning = [{ $victim }] died of: burning
.bleeding = [{ $victim }] died of: bleeding
.curse = [{ $victim }] died of: curse
.crippled = [{ $victim }] died of: crippled
.frozen = [{ $victim }] died of: frozen
.mysterious = [{ $victim }] died of: secret
## Other PvP deaths, both $attacker_gender and $victim_gender are available
hud-chat-pvp_melee_kill_msg = [{ $attacker }] defeated [{ $victim }]
hud-chat-pvp_ranged_kill_msg = [{ $attacker }] shot [{ $victim }]
hud-chat-pvp_explosion_kill_msg = [{ $attacker }] blew up [{ $victim }]
hud-chat-pvp_energy_kill_msg = [{ $attacker }] killed [{ $victim }] with magic
hud-chat-pvp_other_kill_msg = [{ $attacker }] killed [{ $victim }]
## Other PvE deaths, only $victim_gender is available
hud-chat-npc_melee_kill_msg = { $attacker } killed [{ $victim }]
hud-chat-npc_ranged_kill_msg = { $attacker } shot [{ $victim }]
hud-chat-npc_explosion_kill_msg = { $attacker } blew up [{ $victim }]
hud-chat-npc_energy_kill_msg = { $attacker } killed [{ $victim }] with magic
hud-chat-npc_other_kill_msg = { $attacker } killed [{ $victim }]
## Other deaths, only $victim_gender is available
hud-chat-fall_kill_msg = [{ $name }] died from fall damage
hud-chat-suicide_msg = [{ $name }] died from self-inflicted wounds
hud-chat-default_death_msg = [{ $name }] died
## Chat utils
hud-chat-all = All
hud-chat-chat_tab_hover_tooltip = Right click for settings
## HUD Pickup message
hud-loot-pickup-msg-you = { $amount ->
[1] You picked up { $item }
*[other] You picked up {$amount}x {$item}
}
hud-loot-pickup-msg = { $amount ->
[1] { $actor } picked up { $item }
*[other] { $actor } picked up { $amount }x { $item }
}

View File

@ -0,0 +1,42 @@
hud-map-map_title = Map
hud-map-qlog_title = Quests
hud-map-topo_map = Topographic
hud-map-difficulty = Difficulty
hud-map-towns = Towns
hud-map-castles = Castles
hud-map-dungeons = Dungeons
hud-map-caves = Caves
hud-map-cave = Cave
hud-map-peaks = Mountains
hud-map-biomes = Biomes
hud-map-voxel_map = Voxel map
hud-map-trees = Giant Trees
hud-map-tree = Giant Tree
hud-map-town = Town
hud-map-castle = Castle
hud-map-bridge = Bridge
hud-map-dungeon = Dungeon
hud-map-df_mine = Mine
hud-map-difficulty_dungeon =
Dungeon
Difficulty: { $difficulty }
hud-map-drag = Drag
hud-map-zoom = Zoom
hud-map-mid_click = Set Waypoint
hud-map-recenter = Recenter
hud-map-marked_location = Marked Location
hud-map-marked_location_remove = Click to remove
hud-map-change_map_mode = Change Map Mode
hud-map-toggle_minimap_voxel = Toggle Minimap Voxel View
hud-map-zoom_minimap_explanation =
Zoom in the Minimap to see
the area around you in higher detail
hud-map-gnarling = Gnarling Fortification
hud-map-chapel_site = Sea Chapel
hud-map-adlet = Adlet Stronghold
hud-map-haniwa = Haniwa Catacomb
hud-map-cultist = Cultist Dungeon
hud-map-sahagin = Sahagin Island
hud-map-terracotta = Terracotta Ruins
hud-map-placed_by = Placed by { $name }

View File

@ -0,0 +1,84 @@
hud-do_not_show_on_startup = Don't show this on startup
hud-show_tips = Show Tips
hud-quests = Quests
hud-you_died = You Died
hud-waypoint_saved = Waypoint Saved
hud-sp_arrow_txt = SP
hud-inventory_full = Inventory Full
hud-someone_else = someone else
hud-another_group = another group
hud-owned_by_for_secs = Owned by { $name } for { $secs } secs
hud-press_key_to_show_keybindings_fmt = [{ $key }] Key bindings
hud-press_key_to_toggle_lantern_fmt = [{ $key }] Lantern
hud-press_key_to_show_debug_info_fmt = Press { $key } to show debug info
hud-press_key_to_toggle_keybindings_fmt = Press { $key } to toggle key bindings
hud-press_key_to_toggle_debug_info_fmt = Press { $key } to toggle debug info
hud_items_lost_dur = Your equipped items have lost Durability.
hud-press_key_to_respawn = Press { $key } to respawn at the last campfire you visited.
hud-tutorial_btn = Tutorial
hud-tutorial_click_here = Press [ { $key } ] to free your cursor and click this button!
hud-tutorial_elements = Crafting
hud-temp_quest_headline = Greetings traveller!
hud-temp_quest_text =
To begin your journey you could start looking through this village and gather some supplies.
You are welcome to take whatever you need on your journey!
Look at the bottom right of the screen to find various things like your bag, the crafting menu and the map.
The crafting stations allow you to create armor, weapons, food and much more!
The wild animals all around town are a great source of Animal Hide to create some protection against the dangers of the world.
Whenever you feel ready, try to get even better equipment from the many challenges marked on your map!
hud-spell = Spells
hud-diary = Diary
hud-free_look_indicator = Free look active. Press { $key } to disable.
hud-camera_clamp_indicator = Camera vertical clamp active. Press { $key } to disable.
hud-auto_walk_indicator = Auto walk/swim active
hud-zoom_lock_indicator-remind = Zoom locked
hud-zoom_lock_indicator-enable = Camera zoom locked
hud-zoom_lock_indicator-disable = Camera zoom unlocked
hud-activate = Activate
hud-deactivate = Deactivate
hud-collect = Collect
hud-pick_up = Pick up
hud-open = Open
hud-use = Use
hud-read = Read
hud-unlock-requires = Open with { $item }
hud-unlock-consumes = Use { $item } to open
hud-mine = Mine
hud-dig = Dig
hud-mine-needs_pickaxe = Needs Pickaxe
hud-mine-needs_shovel = Needs Shovel
hud-mine-needs_unhandled_case = Needs ???
hud-talk = Talk
hud-pet = Pet
hud-trade = Trade
hud-mount = Mount
hud-follow = Follow
hud-stay = Stay
hud-sit = Sit
hud-steer = Steer
hud-lay = Lay
hud-portal = Portal
-server = Server
-client = Client
hud-init-stage-singleplayer = Starting singleplayer server...
hud-init-stage-server-db-migrations = [{ -server }]: Applying database migrations...
hud-init-stage-server-db-vacuum = [{ -server }]: Cleaning up database...
hud-init-stage-server-worldsim-erosion = [{ -server }]: Erosion { $percentage } %
hud-init-stage-server-worldciv-civcreate = [{ -server }]: Generated { $generated } out of { $total } civilizations
hud-init-stage-server-worldciv-site = [{ -server }]: Generating sites...
hud-init-stage-server-economysim = [{ -server }]: Simulating economy...
hud-init-stage-server-spotgen = [{ -server }]: Generating spots...
hud-init-stage-server-starting = [{ -server }]: Starting server...
hud-init-stage-multiplayer = Starting multiplayer
hud-init-stage-client-connection-establish = [{ -client }]: Establishing connection to server...
hud-init-stage-client-request-server-version = [{ -client }]: Waiting for server version...
hud-init-stage-client-authentication = [{ -client }]: Authenticating...
hud-init-stage-client-load-init-data = [{ -client }]: Loading initialization data from server...
hud-init-stage-client-starting-client = [{ -client }]: Preparing Client...
hud-init-stage-render-pipeline = Creating render pipeline ({ $done }/{ $total })

View File

@ -0,0 +1,7 @@
hud-quest = Quest
hud-quest-intro = Greetings, { $playername }!
hud-quest-desc-fetch = Please help me find:
hud-quest-desc-kill = Could you help me kill
hud-quest-reward = I will reward you with:
hud-quest-accept = Accept
hud-quest-decline = Decline

View File

@ -0,0 +1,2 @@
hud-sct-experience = { $amount } XP
hud-sct-block = BLOCKED

View File

@ -0,0 +1,167 @@
hud-settings-general = General
hud-settings-none = None
hud-settings-press_behavior-toggle = Toggle
hud-settings-press_behavior-hold = Hold
hud-settings-autopress_behavior-toggle = Toggle
hud-settings-autopress_behavior-auto = Auto
hud-settings-help_window = Help Window
hud-settings-debug_info = Debug Info
hud-settings-show_hitboxes = Show hitboxes
hud-settings-show_chat = Show chat
hud-settings-show_hotkey_hints = Show hotkey hints
hud-settings-tips_on_startup = Tips-On-Startup
hud-settings-ui_scale = UI-Scale
hud-settings-relative_scaling = Relative Scaling
hud-settings-custom_scaling = Custom Scaling
hud-settings-crosshair = Crosshair
hud-settings-opacity = Opacity
hud-settings-hotbar = Hotbar
hud-settings-slots = Slots
hud-settings-toggle_shortcuts = Toggle Shortcuts
hud-settings-buffs_skillbar = Buffs at skill bar
hud-settings-buffs_mmap = Buffs at Minimap
hud-settings-use_prefixes = Use SI prefixes for quantities
hud-settings-prefix_switch_point = Digit limit for SI prefix switch
hud-settings-toggle_bar_experience = Toggle Experience Bar
hud-settings-scrolling_combat_text = Scrolling Combat Text
hud-settings-damage_accumulation_duration = Damage Accumulation Duration
hud-settings-incoming_damage = Incoming Damage
hud-settings-incoming_damage_accumulation_duration = Incoming Damage Accumulation Duration
hud-settings-round_damage = Round Damage
hud-settings-speech_bubble = Speech Bubble
hud-settings-speech_bubble_self = Show Own Speech Bubbles
hud-settings-speech_bubble_dark_mode = Speech Bubble Dark Mode
hud-settings-speech_bubble_icon = Speech Bubble Icon
hud-settings-energybar_numbers = Energy bar numbers
hud-settings-always_show_bars = Always show the energy bar
hud-settings-enable_poise_bar = Enable Poise bar
hud-settings-experience_numbers = Experience points
hud-settings-accumulate_experience = Show experience points as aggregate
hud-settings-values = Values
hud-settings-percentages = Percentages
hud-settings-chat = Chat
hud-settings-background_opacity = Background Opacity
hud-settings-chat_character_name = Character Names in Chat
hud-settings-loading_tips = Loading Screen Tips
hud-settings-reset_interface = Reset to Defaults
hud-settings-pan_sensitivity = Pan Sensitivity
hud-settings-zoom_sensitivity = Zoom Sensitivity
hud-settings-camera_clamp_angle = Angle for vertical camera clamp mode
hud-settings-invert_scroll_zoom = Invert Scroll Zoom
hud-settings-invert_mouse_y_axis = Invert Mouse Y Axis
hud-settings-invert_controller_y_axis = Invert Controller Y Axis
hud-settings-enable_mouse_smoothing = Camera Smoothing
hud-settings-free_look_behavior = Free look behavior
hud-settings-auto_walk_behavior = Auto walk behavior
hud-settings-walking_speed_behavior = Walking speed behavior
hud-settings-walking_speed = Walking speed
hud-settings-camera_clamp_behavior = Camera clamp behavior
hud-settings-zoom_lock_behavior = Camera zoom lock behavior
hud-settings-aim_offset_x = Horizontal Aim Offset
hud-settings-aim_offset_y = Vertical Aim Offset
hud-settings-player_physics_behavior = Player physics (experimental)
hud-settings-stop_auto_walk_on_input = Stop auto walk on movement
hud-settings-auto_camera = Auto camera
hud-settings-bow_zoom = Zoom in when charging bow
hud-settings-zoom_lock = Camera zoom lock
hud-settings-reset_gameplay = Reset to Defaults
hud-settings-view_distance = View Distance
hud-settings-entity_view_distance = Entities View Distance
hud-settings-lod_distance = LoD Distance
hud-settings-sprites_view_distance = Sprites View Distance
hud-settings-entities_detail_distance = Entities Detail Distance
hud-settings-maximum_fps = Maximum FPS
hud-settings-background_fps = Background FPS
hud-settings-present_mode = Present Mode
hud-settings-present_mode-vsync_capped = Vsync capped
hud-settings-present_mode-vsync_adaptive = Adaptive vsync
hud-settings-present_mode-vsync_uncapped = Vsync uncapped
hud-settings-present_mode-vsync_off = Vsync off
hud-settings-fov = Field of View (deg)
hud-settings-gamma = Gamma
hud-settings-exposure = Exposure
hud-settings-ambiance = Ambiance Brightness
hud-settings-antialiasing_mode = AntiAliasing Mode
hud-settings-upscale_factor = Internal Resolution
hud-settings-cloud_rendering_mode = Cloud Rendering Mode
hud-settings-fluid_rendering_mode = Fluid Rendering Mode
hud-settings-fluid_rendering_mode-low = Low
hud-settings-fluid_rendering_mode-medium = Medium
hud-settings-fluid_rendering_mode-high = High
hud-settings-reflection_rendering_mode = Reflection Rendering Mode
hud-settings-reflection_rendering_mode-low = Low
hud-settings-reflection_rendering_mode-medium = Medium
hud-settings-reflection_rendering_mode-high = High
hud-settings-cloud_rendering_mode-minimal = Minimal
hud-settings-cloud_rendering_mode-low = Low
hud-settings-cloud_rendering_mode-medium = Medium
hud-settings-cloud_rendering_mode-high = High
hud-settings-cloud_rendering_mode-ultra = Ultra
hud-settings-fullscreen = Fullscreen
hud-settings-fullscreen_mode = Fullscreen Mode
hud-settings-fullscreen_mode-exclusive = Exclusive
hud-settings-fullscreen_mode-borderless = Borderless
hud-settings-gpu_profiler = Enable GPU timing (not supported everywhere)
hud-settings-particles = Particles
hud-settings-lossy_terrain_compression = Lossy terrain compression
hud-settings-weapon_trails = Weapon trails
hud-settings-flashing_lights = Flashing lights
hud-settings-flashing_lights_info = Enables all kinds of flashing, e.g. flickering or lightning strikes
hud-settings-resolution = Resolution
hud-settings-bit_depth = Bit Depth
hud-settings-refresh_rate = Refresh Rate
hud-settings-lighting_rendering_mode = Lighting Rendering Mode
hud-settings-lighting_rendering_mode-ashikhmin = Type A - High
hud-settings-lighting_rendering_mode-blinnphong = Type B - Medium
hud-settings-lighting_rendering_mode-lambertian = Type L - Cheap
hud-settings-shadow_rendering_mode = Shadow Rendering Mode
hud-settings-shadow_rendering_mode-none = None
hud-settings-shadow_rendering_mode-cheap = Cheap
hud-settings-shadow_rendering_mode-map = Map
hud-settings-shadow_rendering_mode-map-resolution = Resolution
hud-settings-rain_occlusion-resolution = Rain Occlusion Resolution
hud-settings-lod_detail = LoD Detail
hud-settings-save_window_size = Save window size
hud-settings-reset_graphics = Reset to Defaults
hud-settings-minimal_graphics = Minimal
hud-settings-low_graphics = Low
hud-settings-medium_graphics = Medium
hud-settings-high_graphics = High
hud-settings-ultra_graphics = Ultra
hud-settings-bloom = Bloom
hud-settings-point_glow = Point Glow
hud-settings-master_volume = Master Volume
hud-settings-inactive_master_volume_perc = Inactive Window Volume
hud-settings-music_volume = Music Volume
hud-settings-sound_effect_volume = Sound Effects Volume
hud-settings-ambience_volume = Ambience Volume
hud-settings-combat_music = Combat Music
hud-settings-music_spacing = Music Spacing
hud-settings-audio_device = Audio Device
hud-settings-reset_sound = Reset to Defaults
hud-settings-english_fallback = Display English for missing translations
hud-settings-language_send_to_server = Send the configured language to servers (for localizing rules and motd messages)
hud-settings-awaitingkey = Press a key...
hud-settings-unbound = None
hud-settings-reset_keybinds = Reset to defaults
hud-settings-keybind-helper =
M1 to set
M2 to unset
hud-settings-chat_tabs = Chat Tabs
hud-settings-label = Label:
hud-settings-delete = Delete
hud-settings-show_all = Show all
hud-settings-messages = Messages
hud-settings-activity = Activity
hud-settings-death = Death
hud-settings-group = Group
hud-settings-faction = Faction
hud-settings-world = World
hud-settings-region = Region
hud-settings-say = Say
hud-settings-all = All
hud-settings-group_only = Group only
hud-settings-reset_chat = Reset to Defaults
hud-settings-third_party_integrations = Third-party Integrations
hud-settings-enable_discord_integration = Enable Discord Integration
hud-settings-subtitles = Subtitles

View File

@ -0,0 +1 @@
common-signs-keep_out = Keep Out!

View File

@ -0,0 +1,15 @@
hud-social = Players
hud-social-online = Online:
hud-social-friends = Friends
hud-social-not_yet_available = Not yet available
hud-social-faction = Faction
hud-social-play_online_fmt =
{ $nb_player ->
[1] { $nb_player } player online
*[other] { $nb_player } players online
}
hud-social-name = Name
hud-social-level = Level
hud-social-zone = Zone
hud-social-account = Account

View File

@ -0,0 +1,165 @@
subtitle-campfire = Campfire crackling
subtitle-bird_call = Birds singing
subtitle-bees = Bees buzzing
subtitle-owl = Owl hooting
subtitle-running_water = Water bubbling
subtitle-lavapool = Lava pool
subtitle-lightning = Thunder
subtitle-portal-activated = Portal Activated
subtitle-portal-teleported = Teleported via portal
subtitle-footsteps_grass = Walking on grass
subtitle-footsteps_earth = Walking on dirt
subtitle-footsteps_rock = Walking on rock
subtitle-footsteps_snow = Walking on snow
subtitle-pickup_item = Item picked up
subtitle-pickup_failed = Pickup failed
subtitle-glider_open = Glider equipped
subtitle-glider_close = Glider unequipped
subtitle-glide = Gliding
subtitle-roll = Rolling
subtitle-swim = Swimming
subtitle-climb = Climbing
subtitle-damage = Damage
subtitle-death = Death
subtitle-wield_bow = Bow equipped
subtitle-unwield_bow = Bow unequipped
subtitle-pickup_bow = Bow picked up
subtitle-wield_sword = Sword equipped
subtitle-unwield_sword = Sword unequipped
subtitle-sword_attack = Sword swung
subtitle-pickup_sword = Sword picked up
subtitle-wield_axe = Axe equipped
subtitle-unwield_axe = Axe unequipped
subtitle-axe_attack = Axe swung
subtitle-pickup_axe = Axe picked up
subtitle-wield_hammer = Hammer equipped
subtitle-unwield_hammer = Hammer unequipped
subtitle-hammer_attack = Hammer swung
subtitle-pickup_hammer = Hammer picked up
subtitle-wield_staff = Staff equipped
subtitle-unwield_staff = Staff unequipped
subtitle-fire_shot = Staff fired
subtitle-staff_attack = Staff fired
subtitle-pickup_staff = Staff picked up
subtitle-wield_sceptre = Sceptre equipped
subtitle-unwield_sceptre = Sceptre unequipped
subtitle-sceptre_heal = Sceptre heal aura
subtitle-pickup_sceptre = Sceptre picked up
subtitle-wield_dagger = Dagger equipped
subtitle-uwield_dagger = Dagger unequipped
subtitle-dagger_attack = Dagger swung
subtitle-pickup_dagger = Dagger picked up
subtitle-wield_shield = Shield equipped
subtitle-unwield_shield = Shield unequipped
subtitle-shield_attack = Shield pushed
subtitle-pickup_shield = Shield picked up
subtitle-pickup_pick = Pickaxe picked up
subtitle-pickup_gemstone = Gemstone picked up
subtitle-instrument_organ = Organ playing
subtitle-wield_instrument = Instrument equipped
subtitle-unwield_instrument = Instrument unequipped
subtitle-instrument_double_bass = Double Bass playing
subtitle-instrument_flute = Flute playing
subtitle-instrument_glass_flute = Glass Flute playing
subtitle-instrument_lyre = Lyre playing
subtitle-instrument_icy_talharpa = Icy Talharpa playing
subtitle-instrument_kalimba = Kalimba playing
subtitle-instrument_melodica = Melodica playing
subtitle-instrument_lute = Lute playing
subtitle-instrument_steeldrum = Steeldrum playing
subtitle-instrument_shamisen = Shamisen playing
subtitle-instrument_sitar = Sitar playing
subtitle-instrument_guitar = Guitar playing
subtitle-instrument_dark_guitar = Dark Guitar playing
subtitle-instrument_washboard = Washboard playing
subtitle-instrument_wildskin_drum = Wildskin Drum playing
subtitle-pickup_instrument = Pickup instrument
subtitle-explosion = Explosion
subtitle-surprise_egg = Divine Sound
subtitle-arrow_shot = Arrow released
subtitle-arrow_miss = Arrow miss
subtitle-arrow_hit = Arrow hit
subtitle-skill_point = Skill Point gained
subtitle-sceptre_beam = Sceptre beam
subtitle-flame_thrower = Flame thrower
subtitle-break_block = Block destroyed
subtitle-attack_blocked = Attack blocked
subtitle-parry = Parried
subtitle-interrupted = Interrupted
subtitle-stunned = Stunned
subtitle-dazed = Dazed
subtitle-knocked_down = Knocked down
subtitle-attack-ground_slam = Ground slam
subtitle-attack-laser_beam = Laser beam
subtitle-attack-cyclops_charge = Cyclops charge
subtitle-attack-fuse_charge = Fuse sizzling
subtitle-giga_roar = Frost gigas roar
subtitle-deep_laugh = Deep Laugh
subtitle-bleep = Beep Bleep
subtitle-attack-flash_freeze = Flash freeze
subtitle-attack-icy_spikes = Icy spikes
subtitle-attack-ice_crack = Ice crack
subtitle-attack-steam = Steam
subtitle-attack-shovel = Shovel digging
subtitle-attack-from-the-ashes = Heal Sound
subtitle-consume_potion = Drinking potion
subtitle-consume_apple = Eating apple
subtitle-consume_cheese = Eating cheese
subtitle-consume_food = Eating
subtitle-consume_liquid = Drinking
subtitle-utterance-alligator-angry = Alligator hissing
subtitle-utterance-antelope-angry = Antelope snorting
subtitle-utterance-biped_large-angry = Heavy grunting
subtitle-utterance-bird-angry = Bird screeching
subtitle-utterance-adlet-angry = Adlet barking
subtitle-utterance-pig-angry = Pig grunting
subtitle-utterance-reptile-angry = Reptile hissing
subtitle-utterance-sea_crocodile-angry = Sea Crocodile hissing
subtitle-utterance-saurok-angry = Saurok hissing
subtitle-utterance-cat-calm = Cat meowing
subtitle-utterance-cow-calm = Cow mooing
subtitle-utterance-fungome-calm = Fungome squeaking
subtitle-utterance-goat-calm = Goat bleating
subtitle-utterance-pig-calm = Pig oinking
subtitle-utterance-sheep-calm = Sheep bleating
subtitle-utterance-truffler-calm = Truffler oinking
subtitle-utterance-human-greeting = Greeting
subtitle-utterance-adlet-hurt = Adlet whining
subtitle-utterance-antelope-hurt = Antelope crying
subtitle-utterance-biped_large-hurt = Heavy hurting
subtitle-utterance-human-hurt = Human hurting
subtitle-utterance-lion-hurt = Lion growling
subtitle-utterance-mandroga-hurt = Mandroga screaming
subtitle-utterance-maneater-hurt = Maneater burping
subtitle-utterance-marlin-hurt = Marlin hurting
subtitle-utterance-mindflayer-hurt = Mindflayer hurting
subtitle-utterance-dagon-hurt = Dagon hurting
subtitle-utterance-asp-angry = Asp hissing
subtitle-utterance-asp-calm = Asp croaking
subtitle-utterance-asp-hurt = Asp hurting
subtitle-utterance-wendigo-angry = Wendigo screaming
subtitle-utterance-wendigo-calm = Wendigo mumbling
subtitle-utterance-wolf-angry = Wolf growling
subtitle-utterance-wolf-hurt = Wolf whining
subtitle-utterance-wyvern-angry = Wyvern roaring
subtitle-utterance-wyvern-hurt = Wyvern hurting
subtitle-utterance-phoenix-angry = Phoenix screaming
subtitle-utterance-phoenix-hurt = Phoenix hurting

View File

@ -1,4 +1,3 @@
announcement = "Beep Boop!"
position = [17720.0, 14951.0, 237.0] position = [17720.0, 14951.0, 237.0]
orientation = 0 orientation = 0

View File

@ -21,11 +21,12 @@ use veloren_common::{
tool::AbilityMap, tool::AbilityMap,
ChatType, ControllerInputs, Item, Ori, Pos, ChatType, ControllerInputs, Item, Ori, Pos,
}, },
outcome::Outcome,
time::DayPeriod, time::DayPeriod,
trade::{PendingTrade, TradeAction, TradeResult}, trade::{PendingTrade, TradeAction, TradeResult},
uid::Uid, uid::Uid,
uuid::Uuid, uuid::Uuid,
ViewDistances, DamageSource, ViewDistances,
}; };
use veloren_common_net::sync::WorldSyncExt; use veloren_common_net::sync::WorldSyncExt;
@ -36,10 +37,12 @@ const COINS: ItemDefinitionId =
const CLIENT_TPS: Duration = Duration::from_millis(33); const CLIENT_TPS: Duration = Duration::from_millis(33);
const TRADE_ACTION_DELAY: Duration = Duration::from_millis(300); const TRADE_ACTION_DELAY: Duration = Duration::from_millis(300);
const ACCOUNCEMENT_DELAY: Duration = Duration::from_mins(45); const ACCOUNCEMENT_DELAY: Duration = Duration::from_mins(45);
const OUCH_DELAY: Duration = Duration::from_secs(2);
/// An active connection to the Veloren server that will attempt to run every time the `tick` /// An active connection to the Veloren server that will attempt to run every time the `tick`
/// function is called. /// function is called.
pub struct Bot { pub struct Bot {
username: String,
position: Pos, position: Pos,
orientation: Ori, orientation: Ori,
admins: Vec<String>, admins: Vec<String>,
@ -60,6 +63,7 @@ pub struct Bot {
previous_trade_receipt: Option<Reciept>, previous_trade_receipt: Option<Reciept>,
last_trade_action: Instant, last_trade_action: Instant,
last_announcement: Instant, last_announcement: Instant,
last_ouch: Instant,
sort_count: u8, sort_count: u8,
} }
@ -136,6 +140,7 @@ impl Bot {
let now = Instant::now(); let now = Instant::now();
Ok(Bot { Ok(Bot {
username,
position, position,
orientation, orientation,
admins, admins,
@ -152,6 +157,7 @@ impl Bot {
previous_trade_receipt: None, previous_trade_receipt: None,
last_trade_action: now, last_trade_action: now,
last_announcement: now, last_announcement: now,
last_ouch: now,
sort_count: 0, sort_count: 0,
announcement, announcement,
}) })
@ -278,11 +284,6 @@ impl Bot {
Some(price_correction_message) Some(price_correction_message)
} }
} }
"location" => {
self.send_location_info(&sender)?;
None
}
"ori" => { "ori" => {
if self.is_user_admin(&sender)? { if self.is_user_admin(&sender)? {
if let Some(new_rotation) = split_content.next() { if let Some(new_rotation) = split_content.next() {
@ -365,6 +366,36 @@ impl Bot {
); );
} }
} }
VelorenEvent::Outcome(Outcome::ProjectileHit {
target: Some(target),
..
}) => {
if let Some(uid) = self.client.uid() {
if uid == target && self.last_ouch.elapsed() > OUCH_DELAY {
self.client
.send_command("say".to_string(), vec!["Ouch!".to_string()]);
self.last_ouch = Instant::now();
}
}
}
VelorenEvent::Outcome(Outcome::HealthChange { info, .. }) => {
if let Some(DamageSource::Buff(_)) = info.cause {
return Ok(true);
}
if let Some(uid) = self.client.uid() {
if uid == info.target
&& info.amount.is_sign_negative()
&& self.last_ouch.elapsed() > OUCH_DELAY
{
self.client
.send_command("say".to_string(), vec!["That hurt!".to_string()]);
self.last_ouch = Instant::now();
}
}
}
VelorenEvent::TradeComplete { result, trade } => { VelorenEvent::TradeComplete { result, trade } => {
let my_party = trade let my_party = trade
.which_party(self.client.uid().ok_or("Failed to find uid")?) .which_party(self.client.uid().ok_or("Failed to find uid")?)
@ -408,11 +439,24 @@ impl Bot {
Ok(true) Ok(true)
} }
fn send_location_info(&mut self, target: &Uid) -> Result<(), String> { /// Make the bot's trading and help accouncements
let player_name = self ///
.find_player_alias(target) /// Currently, this can make two announcements: one in /region with basic usage instructions
.ok_or("Failed to find player alias")? /// is always made. If an announcement was provided when the bot was created, it will make it
.to_string(); /// in /world.
fn handle_announcement(&mut self) -> Result<(), String> {
debug!("Making an announcement");
self.client.send_command(
"region".to_string(),
vec![format!(
"I'm a bot. You can trade with me or check prices: '/tell {} price [search_term]'.",
self.username
)],
);
if let Some(announcement) = &self.announcement {
let announcement = if announcement.contains("{location}") {
let location = self let location = self
.client .client
.sites() .sites()
@ -429,25 +473,13 @@ impl Bot {
}) })
.unwrap_or(format!("{:?}", self.position)); .unwrap_or(format!("{:?}", self.position));
self.client.send_command( announcement.replace("{location}", &location)
"tell".to_string(), } else {
vec![player_name, format!("I am at {location}.")], announcement.clone()
); };
Ok(())
}
/// Make the bot's trading and help accouncements
///
/// Currently, this can make two announcements: one in /region with basic usage instructions
/// is always made. If an announcement was provided when the bot was created, it will make it
/// in /world.
fn handle_announcement(&mut self) -> Result<(), String> {
if let Some(announcement) = &self.announcement {
debug!("Making an announcement");
self.client self.client
.send_command("region".to_string(), vec![announcement.to_string()]); .send_command("world".to_string(), vec![announcement]);
} }
Ok(()) Ok(())
@ -816,42 +848,22 @@ impl Bot {
} }
} }
let inventories = self.client.inventories();
let my_inventory = inventories
.get(self.client.entity())
.ok_or("Failed to find inventory")?;
for (item_id, price) in &self.sell_prices.0 { for (item_id, price) in &self.sell_prices.0 {
let item = Item::new_from_item_definition_id( let item_name = self.get_item_name(item_id.as_ref());
item_id.as_ref(),
&self.ability_map,
&self.material_manifest,
)
.map_err(|error| error.to_string())?;
let (item_name_i18n_id, _) = item.i18n(&self.item_i18n);
let item_name = self.localization.read().get_content(&item_name_i18n_id);
let item_inventory_slot = my_inventory.get_slot_of_item(&item);
let stock = if let Some(slot_id) = item_inventory_slot {
my_inventory.get(slot_id).unwrap().amount()
} else {
0
};
if item_name.to_lowercase().contains(&search_term) { if item_name.to_lowercase().contains(&search_term) {
selling.push((item_name, price, stock)); selling.push((item_name, price));
continue; continue;
} }
if let Some(item_id_string) = item_id.as_ref().itemdef_id() { if let Some(item_id_string) = item_id.as_ref().itemdef_id() {
if item_id_string.to_lowercase().contains(&search_term) { if item_id_string.to_lowercase().contains(&search_term) {
selling.push((item_name, price, stock)); selling.push((item_name, price));
} }
} }
} }
drop(inventories);
let total_found = buying.len() + selling.len(); let total_found = buying.len() + selling.len();
if total_found == 0 { if total_found == 0 {
@ -898,12 +910,12 @@ impl Bot {
); );
} }
for (item_name, price, stock) in selling { for (item_name, price) in selling {
self.client.send_command( self.client.send_command(
"tell".to_string(), "tell".to_string(),
vec![ vec![
player_name.clone(), player_name.clone(),
format!("Selling {item_name} for {price} coins. I have {stock} in stock."), format!("Selling {item_name} for {price} coins."),
], ],
); );
} }
@ -931,10 +943,7 @@ impl Bot {
fn handle_position_and_orientation(&mut self) -> Result<(), String> { fn handle_position_and_orientation(&mut self) -> Result<(), String> {
if let Some(current_position) = self.client.current::<Pos>() { if let Some(current_position) = self.client.current::<Pos>() {
if current_position != self.position { if current_position != self.position {
debug!( debug!("Updating position to {}", self.position.0);
"Updating position from {} to {}",
current_position.0, self.position.0
);
let entity = self.client.entity(); let entity = self.client.entity();
let ecs = self.client.state_mut().ecs(); let ecs = self.client.state_mut().ecs();
@ -948,10 +957,7 @@ impl Bot {
if let Some(current_orientation) = self.client.current::<Ori>() { if let Some(current_orientation) = self.client.current::<Ori>() {
if current_orientation != self.orientation { if current_orientation != self.orientation {
debug!( debug!("Updating orientation to {:?}", self.orientation);
"Updating orientation from {:?} to {:?}",
current_orientation, self.orientation
);
let entity = self.client.entity(); let entity = self.client.entity();
let ecs = self.client.state_mut().ecs(); let ecs = self.client.state_mut().ecs();

View File

@ -29,10 +29,10 @@ fn main() {
}; };
let game_server = config let game_server = config
.game_server .game_server
.unwrap_or_else(|| "server.veloren.net".to_string()); .unwrap_or("server.veloren.net".to_string());
let auth_server = config let auth_server = config
.auth_server .auth_server
.unwrap_or_else(|| "https://auth.veloren.net".to_string()); .unwrap_or("https://auth.veloren.net".to_string());
let mut bot = Bot::new( let mut bot = Bot::new(
game_server, game_server,
&auth_server, &auth_server,