feat(Core): CanAccountCreateCharacter hook (#13020)
This commit is contained in:
@@ -432,6 +432,11 @@ void WorldSession::HandleCharCreateOpcode(WorldPacket& recvData)
|
|||||||
|
|
||||||
std::function<void(PreparedQueryResult)> finalizeCharacterCreation = [this, createInfo](PreparedQueryResult result)
|
std::function<void(PreparedQueryResult)> finalizeCharacterCreation = [this, createInfo](PreparedQueryResult result)
|
||||||
{
|
{
|
||||||
|
if (!sScriptMgr->CanAccountCreateCharacter(createInfo, GetAccountId()))
|
||||||
|
{
|
||||||
|
SendCharCreate(CHAR_CREATE_DISABLED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
bool haveSameRace = false;
|
bool haveSameRace = false;
|
||||||
uint32 heroicReqLevel = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER);
|
uint32 heroicReqLevel = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_MIN_LEVEL_FOR_HEROIC_CHARACTER);
|
||||||
bool hasHeroicReqLevel = (heroicReqLevel == 0);
|
bool hasHeroicReqLevel = (heroicReqLevel == 0);
|
||||||
|
|||||||
@@ -81,3 +81,18 @@ void ScriptMgr::OnFailedPasswordChange(uint32 accountId)
|
|||||||
script->OnFailedPasswordChange(accountId);
|
script->OnFailedPasswordChange(accountId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ScriptMgr::CanAccountCreateCharacter(std::shared_ptr<CharacterCreateInfo> createInfo, uint32 accountId)
|
||||||
|
{
|
||||||
|
auto ret = IsValidBoolScript<AccountScript>([&](AccountScript* script)
|
||||||
|
{
|
||||||
|
return !script->CanAccountCreateCharacter(createInfo, accountId);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (ret && *ret)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ class Vehicle;
|
|||||||
class WorldObject;
|
class WorldObject;
|
||||||
class WorldPacket;
|
class WorldPacket;
|
||||||
class WorldSocket;
|
class WorldSocket;
|
||||||
|
class CharacterCreateInfo;
|
||||||
|
|
||||||
struct AchievementCriteriaData;
|
struct AchievementCriteriaData;
|
||||||
struct AuctionEntry;
|
struct AuctionEntry;
|
||||||
@@ -1458,6 +1459,9 @@ public:
|
|||||||
|
|
||||||
// Called when Password failed to change for Account
|
// Called when Password failed to change for Account
|
||||||
virtual void OnFailedPasswordChange(uint32 /*accountId*/) { }
|
virtual void OnFailedPasswordChange(uint32 /*accountId*/) { }
|
||||||
|
|
||||||
|
// Called when creating a character on the Account
|
||||||
|
[[nodiscard]] virtual bool CanAccountCreateCharacter(std::shared_ptr<CharacterCreateInfo> /*createInfo*/, uint32 /*accountId*/) { return true;}
|
||||||
};
|
};
|
||||||
|
|
||||||
class GuildScript : public ScriptObject
|
class GuildScript : public ScriptObject
|
||||||
@@ -2356,6 +2360,7 @@ public: /* AccountScript */
|
|||||||
void OnFailedEmailChange(uint32 accountId);
|
void OnFailedEmailChange(uint32 accountId);
|
||||||
void OnPasswordChange(uint32 accountId);
|
void OnPasswordChange(uint32 accountId);
|
||||||
void OnFailedPasswordChange(uint32 accountId);
|
void OnFailedPasswordChange(uint32 accountId);
|
||||||
|
bool CanAccountCreateCharacter(std::shared_ptr<CharacterCreateInfo> createInfo, uint32 accountId);
|
||||||
|
|
||||||
public: /* GuildScript */
|
public: /* GuildScript */
|
||||||
void OnGuildAddMember(Guild* guild, Player* player, uint8& plRank);
|
void OnGuildAddMember(Guild* guild, Player* player, uint8& plRank);
|
||||||
|
|||||||
Reference in New Issue
Block a user