docs-en:changelog.md

Changelog

This file contains the changelogs of all big API changes.

  • PrepareStatment
- setNull(...)
+ SetData(...)
- setBool(...)
+ SetData(...)
- setUInt8(...)
+ SetData(...)
- setInt8(...)
+ SetData(...)
- setUInt16(...)
+ SetData(...)
- setInt16(...)
+ SetData(...)
- setUInt32(...)
+ SetData(...)
- setUInt64(...)
+ SetData(...)
- setInt64(...)
+ SetData(...)
- setFloat(...)
+ SetData(...)
- setDouble(...)
+ SetData(...)
- setString(...)
+ SetData(...)
- setStringView(...)
+ SetData(...)
- setBinary(...)
+ SetData(...)
  • Fields
- GetBool()
+ Get<bool>()
- GetUInt8()
+ Get<uint8>()
- GetInt8()
+ Get<int8>()
- GetUInt16()
+ Get<uint16>()
- GetInt16()
+ Get<int16>()
- GetUInt32()
+ Get<uint32>()
- GetInt32()
+ Get<int32>()
- GetUInt64()
+ Get<uint64>()
- GetInt64()
+ Get<int64>()
- GetFloat()
+ Get<float>()
- GetDouble()
+ Get<double>()
- GetString()
+ Get<std::string>()
- GetStringView()
+ Get<std::string_view>()
- GetBinary()
+ Get<Binary>()
- time(nullptr)
+ GameTime::GetGameTime().count()
- sWorld->GetGameTime()
+ GameTime::GetGameTime().count()
- World::GetGameTimeMS()
+ GameTime::GetGameTimeMS().count()

We suggest that you always use the latest version of our master branch. https://github.com/azerothcore/azerothcore-wotlk/tree/master

For server administrators: instructions about how to upgrade existing servers are available here.

This PR removes the modelId column from creature table to allow us to move to a dual entry spawn system.

If this causes an issue for in game or custom spawns the following line of SAI can update the modelId.

(#entryorguid,0,0,0,11,0,100,0,0,0,0,0,0,3,0,#modelId,0,0,0,0,1,0,0,0,0,0,0,0,0,“Creature Name - On Spawn - Change Model to #modelId”),

Special thanks to @Shin @Kitzunu @M'Dic for assistance.

// Unit.cpp
    virtual void Talk(std::string_view text, ChatMsg msgType, Language language, float textRange, WorldObject const* target);
    virtual void Say(std::string_view text, Language language, WorldObject const* target = nullptr);
    virtual void Yell(std::string_view text, Language language, WorldObject const* target = nullptr);
    virtual void TextEmote(std::string_view text, WorldObject const* target = nullptr, bool isBossEmote = false);
    virtual void Whisper(std::string_view text, Language language, Player* target, bool isBossWhisper = false);
    virtual void Talk(uint32 textId, ChatMsg msgType, float textRange, WorldObject const* target);
    virtual void Say(uint32 textId, WorldObject const* target = nullptr);
    virtual void Yell(uint32 textId, WorldObject const* target = nullptr);
    virtual void TextEmote(uint32 textId, WorldObject const* target = nullptr, bool isBossEmote = false);
    virtual void Whisper(uint32 textId, Player* target, bool isBossWhisper = false);
// Object.cpp
    void MonsterSay(const char* text, uint32 language, WorldObject const* target);
    void MonsterYell(const char* text, uint32 language, WorldObject const* target);
    void MonsterTextEmote(const char* text, WorldObject const* target, bool IsBossEmote = false);
    void MonsterWhisper(const char* text, Player const* target, bool IsBossWhisper = false);
    void MonsterSay(int32 textId, uint32 language, WorldObject const* target);
    void MonsterYell(int32 textId, uint32 language, WorldObject const* target);
    void MonsterTextEmote(int32 textId, WorldObject const* target, bool IsBossEmote = false);
    void MonsterWhisper(int32 textId, Player const* target, bool IsBossWhisper = false);
 
    void SendPlaySound(uint32 Sound, bool OnlySelf);
- creature->MonsterSay(text, LANG_XXX, nullptr);
+ creature->Say(text, LANG_XXX);
 
- creature->MonsterTextEmote(text, 0);
+ creature->TextEmote(text);
 
- creature->MonsterWhisper(text, receiver);
+ creature->Whisper(text, LANG_XXX, receiver);
 
- creature->MonsterYell(text, LANG_XXX, NULL);
+ creature->Yell(text, LANG_XXX);
 
- creature->MonsterWhisper(text, target, isBossWhisper);
+ creature->Whisper(text, LANG_XXX, target, isBossWhisper);
 
- SendPlaySound(uint32 Sound, bool OnlySelf);
 PlayDirectSound(uint32 sound_id, Player* target = nullptr);
  • Added OnPlayerPVPFlagChange hook, it will be executed after the pvp flag from a player gets changed.
  • Added OnBeforeFinalizePlayerWorldSession that can be used to modify the cache version that is sent to the client via modules.

Upgrade your Boost version to 1.74 or higher.

  • All abilities for classes up to TBC into playercreateinfo_spell_custom
  • Config option PlayerStart.AllSpells - If enabled, players will start with all their class spells (not talents). You must populate playercreateinfo_spell_custom table with the spells you want, or this will not work! The table has data for all classes / races up to TBC expansion.
  • Config option PlayerStart.CustomSpells
  • Update the worldserver.conf file with the new PlayerStart.AllSpells if you want to change it to “ON”. Otherwise it will go with the default option “OFF” from the worldserver.conf.dist file.
  • playercreateinfo_skills - New Database table for skill assignment.
  • playercreateinfo_spells
  • Use SkillLineAbility.dbc to determine player initial spells.
  • Renamed SkillLineAbilityEntry fields
-    uint32    id;                                           // 0        m_ID
-    uint32    skillId;                                      // 1        m_skillLine
-    uint32    spellId;                                      // 2        m_spell
-    uint32    racemask;                                     // 3        m_raceMask
-    uint32    classmask;                                    // 4        m_classMask
-    //uint32    racemaskNot;                                // 5        m_excludeRace
-    //uint32    classmaskNot;                               // 6        m_excludeClass
-    uint32    req_skill_value;                              // 7        m_minSkillLineRank
-    uint32    forward_spellid;                              // 8        m_supercededBySpell
-    uint32    learnOnGetSkill;                              // 9        m_acquireMethod
-    uint32    max_value;                                    // 10       m_trivialSkillLineRankHigh
-    uint32    min_value;                                    // 11       m_trivialSkillLineRankLow
-    //uint32    characterPoints[2];                         // 12-13    m_characterPoints[2]
+    uint32 ID;                                              // 0
+    uint32 SkillLine;                                       // 1
+    uint32 Spell;                                           // 2
+    uint32 RaceMask;                                        // 3
+    uint32 ClassMask;                                       // 4
+    //uint32 ExcludeRace;                                   // 5
+    //uint32 ExcludeClass;                                  // 6
+    uint32 MinSkillLineRank;                                // 7
+    uint32 SupercededBySpell;                               // 8
+    uint32 AcquireMethod;                                   // 9
+    uint32 TrivialSkillLineRankHigh;                        // 10
+    uint32 TrivialSkillLineRankLow;                         // 11
+    //uint32 CharacterPoints[2];                            // 12-13
  • for example skillLine→forward_spellid will become skillLine→SupercededBySpell
  • player->ADD_GOSSIP_ITEM(whatever)AddGossipItemFor(player, whatever)
  • player->ADD_GOSSIP_ITEM_DB(whatever)AddGossipItemFor(player, whatever)
  • player->ADD_GOSSIP_ITEM_EXTENDED(whatever)AddGossipItemFor(player, whatever)
  • player->CLOSE_GOSSIP_MENU()CloseGossipMenuFor(player)
  • player->SEND_GOSSIP_MENU(textid, creature->GetGUID())SendGossipMenuFor(player, textid, creature->GetGUID())

You also need #include "ScriptedGossip.h" in your cpp files

  • New options for loading scripts static dynamic minimal-static minimal-dynamic #5346
static - Build statically. Default option. for all scripts (As it was before)
dynamic - Build dynamically. After start support Dynamic Linking Library (DLL) can make separated library for each script. Now don't support
minimal-static - builds commands and spells statically
minimal-dynamic - builds commands and spells dynamically. Now don't support
  • Also the default value which is provided by the SCRIPTS variable is overwriteable through the SCRIPTS_COMMANDS, SCRIPTS_SPELLS... variable.
  • Each subdirectory contains it's own translation unit now which is responsible for loading it's directory
  • If module using deprecated script loader api, you get error message.
> Module (mod-ah-bot) using deprecated loader api
  • For most modules, the `CMakeLists.txt' file is no longer needed
  • Need change script loader file.
1. Rename extension in file to `.cpp`
2. Rename general loading function to `Add(module name with replace all whitespace to '_')Scripts()`.
3. Delete macros `AC_ADD_SCRIPT_LOADER` from `CMakeLists.txt`
  • Example loader script for modules:
/*
 * Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
 */
 
// From SC
void AddSC_ServerAutoShutdown();
 
// Add all scripts
void Addmod_server_auto_shutdownScripts()
{
    AddSC_ServerAutoShutdown();
}
  • New cmake option WITH_STRICT_DATABASE_TYPE_CHECKS #5611
  • Prevent mixing databases with query holders #5611
  • Prevent using prepared statements on wrong database #5611
  • Prevent committing transactions started on a different database #5611
  • Convert async queries to new query callbacks #5611
  • PreparedStatement
- PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LOGONPROOF);
+ LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LOGONPROOF);
  • SQLTransaction
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
+ CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
  • new hook OnBeforeSendJoinMessageArenaQueue and OnBeforeSendExitMessageArenaQueue
  • Rename CanExitJoinMessageArenaQueue to OnBeforeSendExitMessageArenaQueue
  • Rename CanSendJoinMessageArenaQueue to OnBeforeSendJoinMessageArenaQueue
  • Just rename all hooks from CanExitJoinMessageArenaQueue and CanSendMessageArenaQueue, to OnBeforeSendExitMessageArenaQueue
  • Just rename all hooks from CanSendJoinMessageArenaQueue and OnBeforeSendJoinMessageArenaQueue
- getPosition
- getBounds
- getBounds2
- getInstanceMapTree
- getModelInstances
- getPosInfo
- getMeshData
- getGroupModels
- getIntersectionTime
- getObjectHitPos
- getAreaInfo
+ GetPosition
+ GetBounds
+ GetBounds2
+ GetInstanceMapTree
+ GetModelInstances
+ GetPosInfo
+ GetMeshData
+ GetGroupModels
+ GetIntersectionTime
+ GetObjectHitPos
+ GetAreaInfo

If you are using any of those methods, simply rename it by changing the first letter of the method from lowercase to uppercase.

Example: getAreaInfoGetAreaInfo

  • Created new changelog system.

To create a new changelog please follow the instructions on our wiki page

  • docs-en/changelog.md.txt
  • 最后更改: 2024/03/15 19:08
  • 127.0.0.1