mirror of
https://github.com/vcmi/vcmi.git
synced 2025-07-03 00:46:55 +02:00
@ -1304,7 +1304,8 @@ void CGameState::prepareCrossoverHeroes(std::vector<CGameState::CampaignHeroRepl
|
|||||||
cgh->spells.clear();
|
cgh->spells.clear();
|
||||||
|
|
||||||
// Spellbook will also be removed
|
// Spellbook will also be removed
|
||||||
ArtifactLocation(cgh, ArtifactPosition(ArtifactPosition::SPELLBOOK)).removeArtifact();
|
if (cgh->hasSpellbook())
|
||||||
|
ArtifactLocation(cgh, ArtifactPosition(ArtifactPosition::SPELLBOOK)).removeArtifact();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1018,7 +1018,7 @@ class DLL_LINKAGE CLoaderBase : public virtual CSerializer
|
|||||||
class CBasicPointerLoader
|
class CBasicPointerLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual const type_info * loadPtr(CLoaderBase &ar, void *data, ui32 pid) const =0; //data is pointer to the ACTUAL POINTER
|
virtual const std::type_info * loadPtr(CLoaderBase &ar, void *data, ui32 pid) const =0; //data is pointer to the ACTUAL POINTER
|
||||||
virtual ~CBasicPointerLoader(){}
|
virtual ~CBasicPointerLoader(){}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1027,7 +1027,7 @@ struct ClassObjectCreator
|
|||||||
{
|
{
|
||||||
static T *invoke()
|
static T *invoke()
|
||||||
{
|
{
|
||||||
static_assert(!typename std::is_abstract<T>::value, "Cannot call new upon abstract classes!");
|
static_assert(!std::is_abstract<T>::value, "Cannot call new upon abstract classes!");
|
||||||
return new T();
|
return new T();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1044,7 +1044,7 @@ struct ClassObjectCreator<T, typename std::enable_if<std::is_abstract<T>::value>
|
|||||||
template <typename Serializer, typename T> class CPointerLoader : public CBasicPointerLoader
|
template <typename Serializer, typename T> class CPointerLoader : public CBasicPointerLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const type_info * loadPtr(CLoaderBase &ar, void *data, ui32 pid) const //data is pointer to the ACTUAL POINTER
|
const std::type_info * loadPtr(CLoaderBase &ar, void *data, ui32 pid) const //data is pointer to the ACTUAL POINTER
|
||||||
{
|
{
|
||||||
Serializer &s = static_cast<Serializer&>(ar);
|
Serializer &s = static_cast<Serializer&>(ar);
|
||||||
T *&ptr = *static_cast<T**>(data);
|
T *&ptr = *static_cast<T**>(data);
|
||||||
@ -1655,7 +1655,10 @@ public:
|
|||||||
void addApplier(ui16 ID)
|
void addApplier(ui16 ID)
|
||||||
{
|
{
|
||||||
if(!apps.count(ID))
|
if(!apps.count(ID))
|
||||||
apps[ID] = T::getApplier<RegisteredType>();
|
{
|
||||||
|
RegisteredType * rtype = nullptr;
|
||||||
|
apps[ID] = T::getApplier(rtype);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Base, typename Derived>
|
template<typename Base, typename Derived>
|
||||||
|
Reference in New Issue
Block a user