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

Commit

Permalink
cint
Browse files Browse the repository at this point in the history
  FilterValid / FilterValidDict updated
  UpdateReferences updated
  addMod now has more named flag parameters
CBash
  No longer returns an error code if a mod is added twice as long as the same flags are used
  • Loading branch information
waruddar committed Sep 10, 2011
1 parent 7b13670 commit afe658b
Show file tree
Hide file tree
Showing 8 changed files with 206 additions and 203 deletions.
Binary file modified CBash.suo
Binary file not shown.
29 changes: 19 additions & 10 deletions CBash/Collection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,19 +162,28 @@ SINT32 Collection::AddMod(STRING const &_FileName, ModFlags &flags, bool IsPrelo
//Prevent loading mods more than once

STRING ModName = DeGhostModName(_FileName);

if(IsLoaded || IsModAdded(ModName ? ModName : _FileName))
ModFile *ModID = IsModAdded(ModName ? ModName : _FileName);
if(ModID != NULL)
{
if(!IsPreloading)
//Suppress any warnings if masters are being loaded, or if the mod is being added with the same flags as before
if(IsPreloading || ModID->Flags.GetFlags() == flags.GetFlags())
{
if(IsLoaded)
printer("AddMod: Error - Unable to add mod \"%s\". The collection has already been loaded.\n", ModName ? ModName : _FileName);
else
printer("AddMod: Warning - Unable to add mod \"%s\". It already exists in the collection.\n", ModName ? ModName : _FileName);
delete []ModName;
return IsPreloading ? -1 : 0;
}
printer("AddMod: Warning - Unable to add mod \"%s\". It already exists in the collection.\n", ModName ? ModName : _FileName);
delete []ModName;
return -1;
}

if(IsLoaded)
{
if(!IsPreloading)
printer("AddMod: Error - Unable to add mod \"%s\". The collection has already been loaded.\n", ModName ? ModName : _FileName);
delete []ModName;
return -1;
}

STRING FileName = new char[strlen(_FileName) + 1];
strcpy_s(FileName, strlen(_FileName) + 1, _FileName);
ModName = ModName ? ModName : FileName;
Expand All @@ -201,12 +210,12 @@ SINT32 Collection::AddMod(STRING const &_FileName, ModFlags &flags, bool IsPrelo
return 0;
}

bool Collection::IsModAdded(STRING const &ModName)
ModFile * Collection::IsModAdded(STRING const &ModName)
{
for(UINT32 p = 0;p < ModFiles.size();p++)
if(icmps(ModName, ModFiles[p]->ModName) == 0)
return true;
return false;
return ModFiles[p];
return NULL;
}

SINT32 Collection::SaveMod(ModFile *&curModFile, SaveFlags &flags)
Expand Down
2 changes: 1 addition & 1 deletion CBash/Collection.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ class Collection
~Collection();

SINT32 AddMod(STRING const &_FileName, ModFlags &flags, bool IsPreloading=false);
bool IsModAdded(STRING const &ModName);
ModFile * IsModAdded(STRING const &ModName);
SINT32 SaveMod(ModFile *&curModFile, SaveFlags &flags);

SINT32 Load();
Expand Down
Binary file modified release/CBash.dll
Binary file not shown.
Binary file modified release/CBashExe.exe
Binary file not shown.
Binary file modified release/CBashExe.pdb
Binary file not shown.
187 changes: 93 additions & 94 deletions release/cint-template.py
Original file line number Diff line number Diff line change
Expand Up @@ -611,28 +611,26 @@ def __str__(self):

@staticmethod
def FilterValid(formIDs, target, AsShort=False):
if isinstance(formIDs, FormID):
if AsShort:
if formIDs.ValidateFormID(target): return [formIDs.GetShortFormID(target)]
return []
if formIDs.ValidateFormID(target): return [formIDs]
return []
try:
if AsShort: return [x.GetShortFormID(target) for x in formIDs if x.ValidateFormID(target)]
return [x for x in formIDs if x.ValidateFormID(target)]
except TypeError:
if formIDs.ValidateFormID(target): return [formIDs]
return []
if AsShort: return [x.GetShortFormID(target) for x in formIDs if x.ValidateFormID(target)]
return [x for x in formIDs if x.ValidateFormID(target)]

@staticmethod
def FilterValidDict(formIDs, target, KeysAreFormIDs=True, AsShort=False):
def FilterValidDict(formIDs, target, KeysAreFormIDs, ValuesAreFormIDs, AsShort=False):
if KeysAreFormIDs:
if AsShort:
return dict([(formID.GetShortFormID(target), value) for formID, value in formIDs.iteritems() if formID.ValidateFormID(target)])
return dict([(formID, value) for formID, value in formIDs.iteritems() if formID.ValidateFormID(target)])
if AsShort:
return dict([(key, formID.GetShortFormID(target)) for key, formID in formIDs.iteritems() if formID.ValidateFormID(target)])
return dict([(key, formID) for key, formID in formIDs.iteritems() if formID.ValidateFormID(target)])
if ValuesAreFormIDs:
if AsShort:
return dict([(key.GetShortFormID(target), value.GetShortFormID(target)) for key, value in formIDs.iteritems() if key.ValidateFormID(target) and value.ValidateFormID(target)])
return dict([(key, value) for key, value in formIDs.iteritems() if key.ValidateFormID(target) and value.ValidateFormID(target)])
else:
if AsShort:
return dict([(key.GetShortFormID(target), value) for key, value in formIDs.iteritems() if key.ValidateFormID(target)])
return dict([(key, value) for key, value in formIDs.iteritems() if key.ValidateFormID(target)])
else:
if ValuesAreFormIDs:
if AsShort:
return dict([(key, value.GetShortFormID(target)) for key, value in formIDs.iteritems() if value.ValidateFormID(target)])
return dict([(key, value) for key, value in formIDs.iteritems() if value.ValidateFormID(target)])
return formIDs

def ValidateFormID(self, target):
"""Tests whether the FormID is valid for the destination.
Expand Down Expand Up @@ -890,29 +888,27 @@ def __str__(self):

@staticmethod
def FilterValid(actorValues, target, AsShort=False):
if isinstance(actorValues, ActorValue):
if AsShort:
if actorValues.ValidateActorValue(target): return [actorValues.GetShortActorValue(target)]
return []
if actorValues.ValidateActorValue(target): return [actorValues]
return []
try:
if AsShort: return [x.GetShortActorValue(target) for x in actorValues if x.ValidateActorValue(target)]
return [x for x in actorValues if x.ValidateActorValue(target)]
except TypeError:
if actorValues.ValidateActorValue(target): return [actorValues]
return []
if AsShort: return [x.GetShortActorValue(target) for x in actorValues if x.ValidateActorValue(target)]
return [x for x in actorValues if x.ValidateActorValue(target)]

@staticmethod
def FilterValidDict(actorValues, target, KeysAreActorValues=True, AsShort=False):
def FilterValidDict(actorValues, target, KeysAreActorValues, ValuesAreActorValues, AsShort=False):
if KeysAreActorValues:
if AsShort:
return dict([(actorValue.GetShortActorValue(target), value) for actorValue, value in actorValues.iteritems() if actorValue.ValidateActorValue(target)])
return dict([(actorValue, value) for actorValue, value in actorValues.iteritems() if actorValue.ValidateActorValue(target)])
if AsShort:
return dict([(key, actorValue.GetShortActorValue(target)) for key, actorValue in actorValues.iteritems() if actorValue.ValidateActorValue(target)])
return dict([(key, actorValue) for key, actorValue in actorValues.iteritems() if actorValue.ValidateActorValue(target)])

if ValuesAreActorValues:
if AsShort:
return dict([(key.GetShortActorValue(target), value.GetShortFormID(target)) for key, value in actorValues.iteritems() if key.ValidateActorValue(target) and value.ValidateActorValue(target)])
return dict([(key, value) for key, value in actorValues.iteritems() if key.ValidateActorValue(target) and value.ValidateActorValue(target)])
else:
if AsShort:
return dict([(key.GetShortActorValue(target), value) for key, value in actorValues.iteritems() if key.ValidateActorValue(target)])
return dict([(key, value) for key, value in actorValues.iteritems() if key.ValidateActorValue(target)])
else:
if ValuesAreActorValues:
if AsShort:
return dict([(key, value.GetShortActorValue(target)) for key, value in actorValues.iteritems() if value.ValidateActorValue(target)])
return dict([(key, value) for key, value in actorValues.iteritems() if value.ValidateActorValue(target)])
return actorValues

def ValidateActorValue(self, target):
"""Tests whether the ActorValue is valid for the destination target.
The test result is saved, so work isn't duplicated if ActorValues are first
Expand Down Expand Up @@ -1182,29 +1178,27 @@ def __str__(self):

@staticmethod
def FilterValid(mgefCodes, target, AsShort=False):
if isinstance(mgefCodes, MGEFCode):
if AsShort:
if mgefCodes.ValidateMGEFCode(target): return [mgefCodes.GetShortMGEFCode(target)]
else:
if mgefCodes.ValidateMGEFCode(target): return [mgefCodes]
return []
try:
if AsShort: return [x.GetShortMGEFCode(target) for x in mgefCodes if x.ValidateMGEFCode(target)]
return [x for x in mgefCodes if x.ValidateMGEFCode(target)]
except TypeError:
if mgefCodes.ValidateMGEFCode(target): return [mgefCodes]
return []
if AsShort: return [x.GetShortMGEFCode(target) for x in mgefCodes if x.ValidateMGEFCode(target)]
return [x for x in mgefCodes if x.ValidateMGEFCode(target)]

@staticmethod
def FilterValidDict(mgefCodes, target, KeysAreMGEFCodes=True, AsShort=False):
def FilterValidDict(mgefCodes, target, KeysAreMGEFCodes, ValuesAreMGEFCodes, AsShort=False):
if KeysAreMGEFCodes:
if AsShort:
return dict([(mgefCode.GetShortMGEFCode(target), value) for mgefCode, value in mgefCodes.iteritems() if mgefCode.ValidateMGEFCode(target)])
return dict([(mgefCode, value) for mgefCode, value in mgefCodes.iteritems() if mgefCode.ValidateMGEFCode(target)])
if AsShort:
return dict([(key, mgefCode.GetShortMGEFCode(target)) for key, mgefCode in mgefCodes.iteritems() if mgefCode.ValidateMGEFCode(target)])
return dict([(key, mgefCode) for key, mgefCode in mgefCodes.iteritems() if mgefCode.ValidateMGEFCode(target)])

if ValuesAreMGEFCodes:
if AsShort:
return dict([(key.GetShortMGEFCode(target), value.GetShortFormID(target)) for key, value in mgefCodes.iteritems() if key.ValidateMGEFCode(target) and value.ValidateMGEFCode(target)])
return dict([(key, value) for key, value in mgefCodes.iteritems() if key.ValidateMGEFCode(target) and value.ValidateMGEFCode(target)])
else:
if AsShort:
return dict([(key.GetShortMGEFCode(target), value) for key, value in mgefCodes.iteritems() if key.ValidateMGEFCode(target)])
return dict([(key, value) for key, value in mgefCodes.iteritems() if key.ValidateMGEFCode(target)])
else:
if ValuesAreMGEFCodes:
if AsShort:
return dict([(key, value.GetShortMGEFCode(target)) for key, value in mgefCodes.iteritems() if value.ValidateMGEFCode(target)])
return dict([(key, value) for key, value in mgefCodes.iteritems() if value.ValidateMGEFCode(target)])
return mgefCodes

def ValidateMGEFCode(self, target):
"""Tests whether the MGEFCode is valid for the destination RecordID.
The test result is saved, so work isn't duplicated if MGEFCodes are first
Expand Down Expand Up @@ -3037,14 +3031,13 @@ def DeleteRecord(self):
def GetRecordUpdatedReferences(self):
return _CGetRecordUpdatedReferences(0, self._RecordID)

def UpdateReferences(self, OldFormIDs, NewFormIDs):
OldFormIDs = FormID.FilterValid(OldFormIDs, self._RecordID, True)
NewFormIDs = FormID.FilterValid(NewFormIDs, self._RecordID, True)
length = len(OldFormIDs)
if length != len(NewFormIDs):
raise AttributeError(_("Mismatched length of filtered references to update."))
OldFormIDs = (c_ulong * length)(*OldFormIDs)
NewFormIDs = (c_ulong * length)(*NewFormIDs)
def UpdateReferences(self, Old_NewFormIDs):
Old_NewFormIDs = FormID.FilterValidDict(Old_NewFormIDs, self, True, True)
length = len(Old_NewFormIDs)
if length != len(Old_NewFormIDs):
return []
OldFormIDs = (c_ulong * length)(*Old_NewFormIDs.keys())
NewFormIDs = (c_ulong * length)(*Old_NewFormIDs.values())
Changes = (c_ulong * length)()
_CUpdateReferences(0, self._RecordID, OldFormIDs, NewFormIDs, byref(Changes), length)
return [x for x in Changes]
Expand Down Expand Up @@ -9933,14 +9926,13 @@ def DeleteRecord(self):
def GetRecordUpdatedReferences(self):
return _CGetRecordUpdatedReferences(0, self._RecordID)

def UpdateReferences(self, OldFormIDs, NewFormIDs):
OldFormIDs = FormID.FilterValid(OldFormIDs, self._RecordID, True)
NewFormIDs = FormID.FilterValid(NewFormIDs, self._RecordID, True)
length = len(OldFormIDs)
if length != len(NewFormIDs):
raise AttributeError(_("Mismatched length of filtered references to update."))
OldFormIDs = (c_ulong * length)(*OldFormIDs)
NewFormIDs = (c_ulong * length)(*NewFormIDs)
def UpdateReferences(self, Old_NewFormIDs):
Old_NewFormIDs = FormID.FilterValidDict(Old_NewFormIDs, self, True, True)
length = len(Old_NewFormIDs)
if length != len(Old_NewFormIDs):
return []
OldFormIDs = (c_ulong * length)(*Old_NewFormIDs.keys())
NewFormIDs = (c_ulong * length)(*Old_NewFormIDs.values())
Changes = (c_ulong * length)()
_CUpdateReferences(0, self._RecordID, OldFormIDs, NewFormIDs, byref(Changes), length)
return [x for x in Changes]
Expand Down Expand Up @@ -13268,15 +13260,13 @@ def GetNewRecordTypes(self):
return [cRecord.value for cRecord in cRecords if cRecord]
return []

def UpdateReferences(self, OldFormIDs, NewFormIDs):
RecordID = _CGetRecordID(self._ModID, 0, 0)
OldFormIDs = FormID.FilterValid(OldFormIDs, RecordID, True)
NewFormIDs = FormID.FilterValid(NewFormIDs, RecordID, True)
length = len(OldFormIDs)
if length != len(NewFormIDs):
raise AttributeError(_("Mismatched length of filtered references to update."))
OldFormIDs = (c_ulong * length)(*OldFormIDs)
NewFormIDs = (c_ulong * length)(*NewFormIDs)
def UpdateReferences(self, Old_NewFormIDs):
Old_NewFormIDs = FormID.FilterValidDict(Old_NewFormIDs, self, True, True)
length = len(Old_NewFormIDs)
if length != len(Old_NewFormIDs):
return []
OldFormIDs = (c_ulong * length)(*Old_NewFormIDs.keys())
NewFormIDs = (c_ulong * length)(*Old_NewFormIDs.values())
Changes = (c_ulong * length)()
_CUpdateReferences(self._ModID, 0, OldFormIDs, NewFormIDs, byref(Changes), length)
return [x for x in Changes]
Expand Down Expand Up @@ -13486,15 +13476,13 @@ def GetNewRecordTypes(self):
return [cRecord.value for cRecord in cRecords if cRecord]
return []

def UpdateReferences(self, OldFormIDs, NewFormIDs):
RecordID = _CGetRecordID(self._ModID, 0, 0)
OldFormIDs = FormID.FilterValid(OldFormIDs, RecordID, True)
NewFormIDs = FormID.FilterValid(NewFormIDs, RecordID, True)
length = len(OldFormIDs)
if length != len(NewFormIDs):
raise AttributeError(_("Mismatched length of filtered references to update."))
OldFormIDs = (c_ulong * length)(*OldFormIDs)
NewFormIDs = (c_ulong * length)(*NewFormIDs)
def UpdateReferences(self, Old_NewFormIDs):
Old_NewFormIDs = FormID.FilterValidDict(Old_NewFormIDs, self, True, True)
length = len(Old_NewFormIDs)
if length != len(Old_NewFormIDs):
return []
OldFormIDs = (c_ulong * length)(*Old_NewFormIDs.keys())
NewFormIDs = (c_ulong * length)(*Old_NewFormIDs.values())
Changes = (c_ulong * length)()
_CUpdateReferences(self._ModID, 0, OldFormIDs, NewFormIDs, byref(Changes), length)
return [x for x in Changes]
Expand Down Expand Up @@ -13767,7 +13755,7 @@ def UnloadAllCollections():
def DeleteAllCollections():
return _CDeleteAllCollections()

def addMod(self, FileName, MinLoad=True, NoLoad=False, IgnoreExisting=False, Flags=0x00000078):
def addMod(self, FileName, MinLoad=True, NoLoad=False, IgnoreExisting=False, Saveable=True, LoadMasters=True, Flags=0x00000079):
## //MinLoad and FullLoad are exclusive
## // If both are set, FullLoad takes priority
## // If neither is set, the mod isn't loaded
Expand Down Expand Up @@ -13843,6 +13831,17 @@ def addMod(self, FileName, MinLoad=True, NoLoad=False, IgnoreExisting=False, Fla
else:
Flags |= fIsFullLoad
Flags &= ~fIsMinLoad

if Saveable:
Flags |= fIsSaveable
else:
Flags &= ~fIsSaveable

if LoadMasters:
Flags |= fIsLoadMasters
else:
Flags &= ~fIsLoadMasters

_CAddMod(self._CollectionID, str(FileName), Flags)
return None

Expand Down
Loading

0 comments on commit afe658b

Please sign in to comment.