A Better Tailor System: Skip Blank Entries and Find Hak Content

Hello, everyone!

My server is currently using one of the widely available tailoring systems.
They work fine but I have yet to find one that does two important things:
Most tailors skip blank spots, but cannot find custom content.
The tailor I’m currently using detects all custom content, but doesn’t skip blank entries in the 2da files.

How hard would it be for me to go in and script the blank-entry check?
Does anyone have something they can recommend?

Any advice or insights would be welcome.

Should be easy. All 2da processing is done via Get2DAString. The tailor must be doing that already, in order to cycle through custom content. So, each time it finds a new line with that function, you just need to call Get2DAString again, for the same line number, and the field that you want to check for blanks.

1 Like

Thanks for the reply, Proleric.
I’ll see what I can do.

I had read your question before but did not realize that you’re talking about the CCOH until I read your question on the CCOH page :smile:

Usually the CCOH finds custom content AND skips blank entries in the 2DA files. So if the CCOH does not work as it should I usually blame incorrect 2da files that do not match the existing armor part models.

However the CCOH reads the part_xxx 2da files only once and stores their contents as local strings on the module. This is a relict from the old days when 2da access was rather slow. The disadvantage is that later changes to these 2da files are undetected by the CCOH unless the locals get reseted. This is not a problem for single player but might be a problem on a server. Unfortunately there’s no build-in possibility to reset these local variables other than doing it by hand or writing your own script:

Summary
    string MK_IntToString(int nInteger, int nLen, string c)
    {
       string s = IntToString(nInteger);
       while (GetStringLength(s)<nLen)
       {
          s=c+s;
       }
       return s;
    }

    void main()
    {
       int iPart, iAC;
       object oModule = GetModule();
       for (iPart=0; iPart<ITEM_APPR_ARMOR_NUM_MODELS; iPart++)
       {
          switch (iPart)
          {
          case ITEM_APPR_ARMOR_MODEL_TORSO:
               for (iAC=0; iAC<=8; iAC++)
               {
                    DeleteLocalString(oModule, "MK_IAAM_PreReadIDs"+MK_IntToString(iPart,2,"0")+IntToString(iAC));
               }
               break;
          default:
               DeleteLocalString(oModule, "MK_IAAM_PreReadIDs"+MK_IntToString(iPart,2,"0"));
               break;
          }
       }
       DeleteLocalString(oModule, "MK_IDPreRead_Cloak");
       DeleteLocalString(oModule, "MK_IDPreReadR_Cloak");
    }

Haven’t tested this script but running it should delete the locals and thus make the CCOH recreate them using the current 2da files. Of course this would fix the problem only if actually modified 2da files are the problem.