Hanabi a6a2ca8ef7 feat(Core/GameObjects): Instance gameobject save data implementation (#11113)
* fix(Core): Save gameobject state on instances

Currently, azerothcore doesn't save gameobject states on instances.
Whenever there's a re-start or crash, the instance's gameobjects and
their states aren't saved, producing un-wanted behaviours and blocking instances at times.

Implemented CRUD for new table `instance_saved_data` that holds the states of gameobjects.

- When worldserver launches and gameobjects are loaded, this will check
  if this object's state exists on the DB and sets the previous state.
- On instance deletion (reset) these states are also removed based on
  the instance ID.
- Whenever a gameobject state changes inside a dungeon or raid, we save
  on the database the set state.

* Select query to synchronous and used FindMap()

* loading gameobject states on create

* reseting instance saved data

* missing reset methods and on create state

* database structure

* Update src/server/game/Entities/GameObject/GameObject.cpp

Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>

* Update src/server/game/Entities/GameObject/GameObject.cpp

Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>

* Update src/server/game/Entities/GameObject/GameObject.cpp

Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>

* Update src/server/game/Entities/GameObject/GameObject.cpp

Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>

* Update src/server/game/Entities/Player/PlayerMisc.cpp

Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>

* Update src/server/game/Groups/Group.cpp

Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>

* codestyle

* table changes

* table style

* codestyle

* table changes for columns

* data sanitization

* todo:

- Finish loading db data into the containers
- Using containers to find data
- How to get data from ObjectMGR inside Gameobject?

* loading on start up and db changes

* Removing unused data structure

* Uninitialised integer

* Whitespace

* clean-up and hooks to save states on memory

* Codestyle MySQL deprecated backticks

* i dont understand codefactor

* build

* Update data/sql/updates/pending_db_world/rev_1643395587559675400.sql

Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>

* Update src/server/game/Globals/ObjectMgr.h

Co-authored-by: Kargatum <dowlandtop@yandex.com>

* review changes

* unecessary removal

* pushback instead of emplace

* wrong database update

* Update ObjectMgr.cpp

* missing check

* removing entry from the PR

* missing removals

* last delete

* build

* aha! Found the culprit for the sudden assert errors

* type safety, save only important gameobjects

* static cast to unsigned short

* Update data/sql/updates/pending_db_characters/rev_1643629468629316100.sql

Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>

* type changes

* queries fix

* fix build

* enabling which gameobjects to save on the database

* deadmines iron clad door

* Adjustment to gameobject onj create state and instances:

- Gnomeregan doors and Grubbis boss state
- Deadmines missing doors
- Stratholme gameobjects state saved

* forgot emi blastfuse change to despawn

* Leaving group logic

* codestyle

* fixing merge issues

* prevent bad behaviour

* brain meltdown

* Update data/sql/updates/pending_db_characters/rev_1643629468629316100.sql

* Update data/sql/updates/pending_db_world/rev_1649359139539727000.sql

Co-authored-by: Claudiodfc <54484196+claudiodfc@users.noreply.github.com>
Co-authored-by: Kitzunu <24550914+Kitzunu@users.noreply.github.com>
Co-authored-by: Kargatum <dowlandtop@yandex.com>
Co-authored-by: Skjalf <47818697+Nyeriah@users.noreply.github.com>
2022-05-24 10:33:45 -03:00
2022-05-01 07:00:40 +02:00
2021-06-15 11:04:29 +02:00
2022-05-01 07:00:40 +02:00
2022-03-24 09:29:07 +00:00
2021-10-01 10:33:35 +02:00
2018-07-15 22:51:17 +02:00
2016-06-26 10:39:44 +02:00

logo AzerothCore

CodeFactor core-build core-modules-build windows-build macos-build docker-build Bountysource StackOverflow Discord

Introduction

AzerothCore (AC) is an open-source game-server application for World of Warcraft, currently supporting the 3.3.5a game version.

It is written in C++ and is based on MaNGOS, TrinityCore and SunwellCore.

Why AzerothCore?

  1. Stability
  2. The authenticity of the content
  3. Modularity
  4. A lot of modules to choose from
  5. Better configuration files system
  6. Compatibility with other emulators
  7. Friendly and helpful community

Stability

As players and administrators ourselves, we take great care into the stability of our core. Other projects focus on the development side of things and tend to forget that users want stability above everything else.

Hence why nobody is allowed to push commits directly to the core. All changes are reviewed and tested before they get to the master branch which means we need as many testers as possible to avoid stalling issues.

Authenticity

Fixing and implementing missing blizzlike content is one of our priorities, and we can boast to offer the most content-complete open-source emulator.

Modules

Modules are essential to AzerothCore's success. Modules allow users to plug them in and out easily, and do not require to modify the core files. It also means users can keep pulling the git changes from the main repository and only develop their modules.

We have a lot of modules already made, some of them are very important and will ease your work:

Configuration files

Our configuration file system allows the user to use a tiny configuration file for better readability and maintenance.

Compatibility with other emulators

Not very far from its ancestor TrinityCore, most scripts can be adapted quite easily. For MaNGOS compatibility, it might require more knowledge but it shares a common base.

Philosophy

Our main goal is to create a playable game server, offering a fully working game experience.

Here are the main points we focus on:

  • Stability
  • Ease of use / Practicability
  • Playability (in-game content)
  • Customization
  • Community-driven software (check our discord)

We also welcome new users (even non-English speaking users!) and help them learn/improve their skills (C++, SQL, Git, software collaboration, tutoring/wiki, etc...).

Unlike other projects which focus more on the developer's side of things, we want users to be able to run their server with as few troubles as possible. All of our contributors run their private servers (local or public).

That's why AzerothCore is easier to use, to maintain, to understand, to develop on, and to customize to suit your needs, than other emulators.

In short, we focus on the user experience (UX), whether it be the player's experience, the developer's experience, or the administrator's experience.

How to Thank us

Being an open-source project, we rely on volunteers to pursue development. Here are ways to help us if you use AzerothCore:

Github Star

Click on the "star this repository" button to help us gain more visibility on Github!

By contributing

Check the CONTRIBUTING section below.

Financially 💰

You can support the AzerothCore by donating. The money will be used to pay freelance developers for more open-source fixes.

Advertising

By talking about us on different platforms or to people who would like to get involved.

Contributing

AzerothCore is a learning project, and there are lots of different ways to contribute to the project:

  • By testing our fixes (we can teach you how to correctly use Git to help us but that will also help you out tremendously)
  • By developing directly to the core or the modules
  • By reporting bugs within the project
  • By creating new modules
  • By improving our wiki
  • By providing direct support to our community (on Discord, StackOverflow or specialized forums)
  • By making extra content (video tutorial for example)
  • By putting bounties on issues

If you want to contribute to the project, you will find a lot of resources that will guide you in our wiki.

Feel free to join us on our Discord chat server where we teach a lot of new people how to get started and who are now important contributors!

Installation

Installation instructions are available here.

We also have an auto-installation bash script here (Warning: try it/analyze it before running it).

Dockerization of AzerothCore is fully supported, and we have various community-made tutorials (eg: AWS / Digital Ocean installation).

Support

Our self-made wiki probably has a lot of answers for you.

For help requests, it is recommended to ask your question on StackOverflow and link it in our chat.

Authors & Contributors

This project exists thanks to:

License

  • The new AzerothCore source components are released under the GNU AGPL v3
  • The old sources based on MaNGOS/TrinityCore are released under the GNU GPL v2

Special thanks

JetBrains is providing free open-source licenses to the AzerothCore developers.

JetBrains

Languages
C++ 92.4%
C 5.3%
Shell 1.3%
CMake 0.7%
Python 0.2%