victov / wrath-rs Goto Github PK
View Code? Open in Web Editor NEWA very functionally incomplete World of Warcraft: Wrath of the Lich King server emulator written in pure rust.
A very functionally incomplete World of Warcraft: Wrath of the Lich King server emulator written in pure rust.
After a few minutes of idle time, the server starts to spam errors about opcode 257 (0x101), or CMSG_STANDSTATE_UPDATE
:
[...]
17-10-2022 10:25:01 WARN wrath_worldserver::client: Error in opcode: Opcode { opcode: 257, size: 4 }.
17-10-2022 10:25:01 WARN wrath_worldserver::client: Error in opcode: Opcode { opcode: 257, size: 4 }.
17-10-2022 10:25:01 WARN wrath_worldserver::client: Error in opcode: Opcode { opcode: 257, size: 4 }.
17-10-2022 10:25:01 WARN wrath_worldserver::client: Error in opcode: Opcode { opcode: 257, size: 4 }.
17-10-2022 10:25:01 WARN wrath_worldserver::client: Error in opcode: Opcode { opcode: 257, size: 4 }.
17-10-2022 10:25:01 WARN wrath_worldserver::client: Error in opcode: Opcode { opcode: 257, size: 4 }.
[...]
Given that there's also a SMSG_STANDSTATE_UPDATE, perhaps the client is expecting a response and spams until it gets it?
Hi!
I have been working on azerust on and off (mostly off) as well as checking in here to see all the exciting progress, and decided it would be great to have a common hub to share resources for people working on wow-related projects in rust. I have added a list here: https://github.com/arlyon/awesome-wow-rust. Please consider opening a PR if you end up splitting out any crates, or if you want to flesh out any useful information on the readme entry. Maybe at some point a discord would be fun however this is very much a 'once every few months' type of passion project for me so for now I propose using discussions: https://github.com/arlyon/awesome-wow-rust/discussions
Implement a right-click response to teleport to a location when right-clicking a game object. This task is blocked by #42.
We need this to have portals, as part of the Full World Traversal milestone.
Implement "regular" in-world chat for characters in vicinity.
Don't bother with party/raid/guild/trade chat, there are no systems in place even remotely related to groups.
Right now, sending CMSG_CHAR_DELETE from a client will completely remove the character row from the table. Ideally, this should be slightly less aggressive:
deleted
column on the characters
table row that prevents it from being sent to clients in SMSG_CHAR_ENUM
.wow_dbc is a library that offers a clean solution to reading DBC files. Using this library would replace the custom logic of DBC reading with a cleaner and more type-safe option.
databases/dbc
custom reading logic.wow_dbc
as a dependencyThe readme has become bloated.
Move the following pieces of information to GH wiki pages, and leave behind links to relevant pages in the readme:
The aim is to leave behind a readme where people can really see what the project is about at first glance and where they should go to get started, rather than a big all-encompassing knowledge document.
sqlx has some option to generate a json file to be able to compile your project without requiring an active database connection.
This will improve iteration time, simplify the github actions and lower the barrier for people to get working on the project.
Azerust has this setup working, for inspiration
If I had to guess, this could be a relatively simple system. I don't know what it would take to get this system working, but surely this can't be as huge as combat or equipment or anything like that.
Spawn a game object into the world, visible for all players that are near it.
This feature is part of the Full world Traversal milestone, since we need portals to work to be able to fully traverse the world.
Currently the wrath-realm-db
contains both game data (creatures, items, etc) and player data (characters, equipment, etc).
Split up wrath-realm-db
into wrath-game-db
containing game data (things that aren't supposed to change per realm), and make wrath-realm-db
only contain realm-specific data, like player characters and items.
The idea is that two realms can read from the same wrath-game-db
and each realm reads/writes to their own wrath-realm-db
. The user permissions for wrath-game-db
could even be read-only.
Hello,
I noticed that you used my wow_srp
library and thought that you would be interested in knowing that I recently released a library for the auth server message format called wow_login_messages
.
It uses a descriptor language called wowm
in order to auto generate idiomatic rust code. The docs are a little rough at the moment, but the simple auth example should give you an idea of how to use it.
I also have world messages for 1.12, but I haven't released them because I have incorrect Rust codegen for the more complex cases.
It currently only has a Read interface but I'm planning async/no_std in the future after I get the miscompilations fixed.
I'm posting here to get some feedback on usability and future direction. To limit the scope I have deliberately only done 1.12 messages but I'm open to including Wrath and other messages if the interest is there.
Even if you don't intend on using the library I would still appreciate contributions, since I plan on auto generating documentation for the wiki at a later point.
I wish you luck with your emulator. :)
cc @WeaponMan Since I know he has done some auth server stuff.
Implement boats/zeppelins to travel through the world. This is part of the Full World Traversal milestone.
This is very likely blocked by #42
CSMG_CHAR_DELETE
is currently not being handled by the server, and deleting characters is impossible.
This should be a relatively easy feature to implement. Add a handler for the relevant packet and a simple database operation.
When logging out, the 20 second countdown appears in the client. After 20 seconds, the client however does not return to character selection.
SMSG_UPDATE_OBJECT
.SMSG_UPDATE_OBJECT
packet during the 20 second logout window. Instant logout works fine, and when you remove all code that can trigger an object update (sit down character, set stunned), the logout also works fine after the 20 seconds.mark_fully_dirty()
on the UpdateMask whenever you change a variable, things seem to work differently (though still not correctly?). So the dirty mask has influence on this bug.In update_builder.rs
there is a TODO note about passing in the correct movement flags, which is currently blocked because they are different types and converting between them is not possible in a clean manner.
This task is blocked by this issue. When that task is done, bump the dependency on wow_messages
and then update the code in update_builder
to fix the todo.
The world server has been fully reworked to use wow_messages but the auth server still contains custom reading/writing code. Refactor the auth server to use wow_login_messages
This issue exists to keep track of the remaining work to refactor the server to use wow_messages.
Some features are so half-implemented that it's better to remove them altogether and circle back to them later and do it properly. This is to avoid having to figure out how e.g. spells/talents work before being able to call this refactor completed, because then it would become a never-ending nightmare.
equipment_handler
to use wow_messagesinstance_handler
to use wow_messageslogin_handler
and logout logic in Character
)queries_handler
to use wow_messagesworld_handler
(use wow_messages and hook up to relevant logic)constants
that is no longer used. (or move to relevant enum in wow_messages)opcodes.rs
podio
can be deletedUpdateMaskExt
for setting common flags/values on UpdateMask that have side-effects and refactor stuff out of impl Character
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.