Skip to content
This repository has been archived by the owner on Dec 16, 2019. It is now read-only.

Commit

Permalink
Collections are no longer automatically deleted by python
Browse files Browse the repository at this point in the history
  The object lifetime is unreliable with temporary instances such as from GetParentCollection()
  Either save a mod with CloseCollection being true, or call Collection::Close() when finished with a collection
FormID/ActorValue/MGEFCodes:
  Can now be validated against records / modfiles / collections instead of just records
  They will be re-validated less often
  Will work with masters using Bash's bolt.Path class
  Are validated more quickly
Added missing GetParentMod(), GetParentCollection() to TES4 records
Added GetParentCollection() to modfiles
Fixed ObTest.py's TestAttrReport()
Added GetCollectionType(CollectionID) to the API
  Returns which game the collection supports
Added GetCollectionIDByModID(ModID) to the API
Added GetModNumEmptyGRUPs(ModID) to the API
  The number of empty groups encountered may now be retrieved
Added GetModNumOrphans(ModID) to the API
  The number of orphaned records encountered may now be retrieved
MakeShortFormID() argument list changed.
  Now takes a ModID rather than RecordID and ModName
  • Loading branch information
waruddar committed Sep 9, 2011
1 parent 2a35494 commit b492519
Show file tree
Hide file tree
Showing 15 changed files with 913 additions and 542 deletions.
Binary file modified CBash.suo
Binary file not shown.
97 changes: 94 additions & 3 deletions CBash/CBash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,29 @@ CPPDLLEXTERN SINT32 UnloadCollection(Collection *CollectionID)
return -1;
}

CPPDLLEXTERN SINT32 GetCollectionType(Collection *CollectionID)
{
PROFILE_FUNC

try
{
//ValidatePointer(CollectionID);
return CollectionID->CollectionType;
}
catch(std::exception &ex)
{
PRINT_EXCEPTION(ex);
}
catch(...)
{
PRINT_ERROR;
}
printer("\n\n");
if(RaiseCallback != NULL)
RaiseCallback();
return -1;
}

CPPDLLEXTERN SINT32 UnloadAllCollections()
{
PROFILE_FUNC
Expand Down Expand Up @@ -896,6 +919,29 @@ CPPDLLEXTERN Collection * GetCollectionIDByRecordID(Record *RecordID)
return NULL;
}

CPPDLLEXTERN Collection * GetCollectionIDByModID(ModFile *ModID)
{
PROFILE_FUNC

try
{
//ValidatePointer(ModID);
return ModID->Parent;
}
catch(std::exception &ex)
{
PRINT_EXCEPTION(ex);
}
catch(...)
{
PRINT_ERROR;
}
printer("\n\n");
if(RaiseCallback != NULL)
RaiseCallback();
return NULL;
}

CPPDLLEXTERN UINT32 IsModEmpty(ModFile *ModID)
{
PROFILE_FUNC
Expand Down Expand Up @@ -984,6 +1030,52 @@ CPPDLLEXTERN SINT32 GetModTypes(ModFile *ModID, UINT32ARRAY RecordTypes)
return -1;
}

CPPDLLEXTERN SINT32 GetModNumEmptyGRUPs(ModFile *ModID)
{
PROFILE_FUNC

try
{
//ValidatePointer(ModID);
return ModID->FormIDHandler.EmptyGRUPs;
}
catch(std::exception &ex)
{
PRINT_EXCEPTION(ex);
}
catch(...)
{
PRINT_ERROR;
}
printer("\n\n");
if(RaiseCallback != NULL)
RaiseCallback();
return -1;
}

CPPDLLEXTERN SINT32 GetModNumOrphans(ModFile *ModID)
{
PROFILE_FUNC

try
{
//ValidatePointer(ModID);
return ModID->FormIDHandler.OrphanedRecords;
}
catch(std::exception &ex)
{
PRINT_EXCEPTION(ex);
}
catch(...)
{
PRINT_ERROR;
}
printer("\n\n");
if(RaiseCallback != NULL)
RaiseCallback();
return -1;
}

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//FormID functions
Expand Down Expand Up @@ -1018,14 +1110,13 @@ CPPDLLEXTERN STRING GetLongIDName(Record *RecordID, const UINT32 FormID, const b
return NULL;
}

CPPDLLEXTERN UINT32 MakeShortFormID(Record *RecordID, STRING const ModName, const UINT32 ObjectID, const bool IsMGEFCode)
CPPDLLEXTERN UINT32 MakeShortFormID(ModFile *ModID, const UINT32 ObjectID, const bool IsMGEFCode)
{
PROFILE_FUNC

try
{
UINT8 ModIndex = ValidateLoadOrderIndex(RecordID->GetParentMod()->Parent, ModName)->FormIDHandler.ExpandedIndex;
return IsMGEFCode ? (ModIndex | (ObjectID & 0xFFFFFF00)) : ((ModIndex << 24) | (ObjectID & 0x00FFFFFF));
return IsMGEFCode ? (ModID->FormIDHandler.ExpandedIndex | (ObjectID & 0xFFFFFF00)) : ((ModID->FormIDHandler.ExpandedIndex << 24) | (ObjectID & 0x00FFFFFF));
}
catch(std::exception &ex)
{
Expand Down
6 changes: 5 additions & 1 deletion CBash/CBash.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ DLLEXTERN Collection * CreateCollection(STRING const ModsPath, const UINT32 Coll
DLLEXTERN SINT32 DeleteCollection(Collection *CollectionID);
DLLEXTERN SINT32 LoadCollection(Collection *CollectionID);
DLLEXTERN SINT32 UnloadCollection(Collection *CollectionID);
DLLEXTERN SINT32 GetCollectionType(Collection *CollectionID);
DLLEXTERN SINT32 UnloadAllCollections();
DLLEXTERN SINT32 DeleteAllCollections();
////////////////////////////////////////////////////////////////////////
Expand All @@ -76,15 +77,18 @@ DLLEXTERN SINT32 GetModLoadOrderByName(Collection *CollectionID, STRING const Mo
DLLEXTERN SINT32 GetModLoadOrderByID(ModFile *ModID);
DLLEXTERN ModFile * GetModIDByRecordID(Record *RecordID);
DLLEXTERN Collection * GetCollectionIDByRecordID(Record *RecordID);
DLLEXTERN Collection * GetCollectionIDByModID(ModFile *ModID);
//DLLEXTERN SINT32 GetShortIDIndex(Collection *CollectionID, const SINT32 ModID, STRING const ModName);
DLLEXTERN UINT32 IsModEmpty(ModFile *ModID);
DLLEXTERN SINT32 GetModNumTypes(ModFile *ModID);
DLLEXTERN SINT32 GetModTypes(ModFile *ModID, UINT32ARRAY RecordTypes);
DLLEXTERN SINT32 GetModNumEmptyGRUPs(ModFile *ModID);
DLLEXTERN SINT32 GetModNumOrphans(ModFile *ModID);
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//FormID functions
DLLEXTERN STRING GetLongIDName(Record *RecordID, const UINT32 FormID, const bool IsMGEFCode);
DLLEXTERN UINT32 MakeShortFormID(Record *RecordID, STRING const ModName, const UINT32 ObjectID, const bool IsMGEFCode);
DLLEXTERN UINT32 MakeShortFormID(ModFile *ModID, const UINT32 ObjectID, const bool IsMGEFCode);
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//Record action functions
Expand Down
4 changes: 2 additions & 2 deletions CBash/Collection.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,11 @@ class Collection
private:
STRING ModsDir;
bool IsLoaded;

whichGameTypes CollectionType;
std::vector<std::pair<ModFile *, Record *> > sortedConflicts;

public:
whichGameTypes CollectionType;

std::vector<ModFile *> ModFiles;
std::vector<ModFile *> LoadOrder255;
std::vector<FormIDResolver *> Expanders;
Expand Down
4 changes: 3 additions & 1 deletion CBash/Common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,9 @@ FormIDHandlerClass::FormIDHandlerClass(std::vector<STRING> &_MAST, UINT32 &_Next
IsEmpty(true),
bMastersChanged(false),
FileStart(0),
FileEnd(0)
FileEnd(0),
EmptyGRUPs(0),
OrphanedRecords(0)
{
//
}
Expand Down
2 changes: 2 additions & 0 deletions CBash/Common.h
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,8 @@ class FormIDHandlerClass
UINT8 CollapsedIndex; //The size of MAST
bool IsEmpty;
bool bMastersChanged;
SINT32 EmptyGRUPs;
SINT32 OrphanedRecords;

FormIDHandlerClass(std::vector<STRING> &_MAST, UINT32 &_NextObject);
~FormIDHandlerClass();
Expand Down
Loading

0 comments on commit b492519

Please sign in to comment.