Advertisement
Guest User

Untitled

a guest
Dec 31st, 2013
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.05 KB | None | 0 0
  1. {
  2.   Export armor stats from *.csv files.
  3.   Right click and apply script to selected armors, armor group,
  4.   plugin or several selected plugins.
  5. }
  6. unit UserScript;
  7.  
  8. var
  9.   slArmo, slValues, slLookup: TStringList;
  10.  
  11. function Initialize: integer;
  12. var
  13.   i: integer;
  14.   dlgOpen: TOpenDialog;
  15. begin
  16.   Result := 0;
  17.  
  18.  
  19.   // strings list with weapons data
  20.   slArmo := TStringList.Create;
  21.  
  22.   // list used to divide imported values
  23.   slValues := TStringList.Create;
  24.   slValues.Delimiter := ';';
  25.   slValues.StrictDelimiter := true; // don't treat space as a delimiter
  26.  
  27.   // lookup list to find formids when importing
  28.   slLookup := TStringList.Create;
  29.  
  30.     // Export: add columns headers line
  31.   slArmo.Add('FormID;Name;Value;Weight;AR');
  32.  
  33. end;
  34.  
  35. function Process(e: IInterface): integer;
  36. var
  37.   i: integer;
  38. begin
  39.   Result := 0;
  40.  
  41.   // process only weapons, skip other records
  42.   if Signature(e) <> 'ARMO' then
  43.     Exit;
  44.  
  45.   // use square brackets [] on formid to prevent Excel from treating them as a numbers
  46.   slArmo.Add(Format('[%s];%s;%s;%s;%s', [
  47.     // FixedFormID depends only on explicit masters and not affected by plugin's load order
  48.     IntToHex(FixedFormID(e), 8),
  49.     GetElementEditValues(e, 'FULL - Name'),
  50.     GetElementEditValues(e, 'DATA\Value'),
  51.     GetElementEditValues(e, 'DATA\Weight'),
  52.     GetElementEditValues(e, 'DNAM - Armor Rating')
  53.     ]));
  54. end;
  55.  
  56. function Finalize: integer;
  57. var
  58.   dlgSave: TSaveDialog;
  59. begin
  60.   Result := 0;
  61.  
  62.   if not Assigned(slArmo) then
  63.     Exit;
  64.    
  65.   // save export file only if we have any data besides header line
  66.   if (slArmo.Count > 1) then begin
  67.     // ask for file to export to
  68.     dlgSave := TSaveDialog.Create(nil);
  69.     dlgSave.Options := dlgSave.Options + [ofOverwritePrompt];
  70.     dlgSave.Filter := 'Spreadsheet files (*.csv)|*.csv';
  71.     dlgSave.InitialDir := ProgramPath;
  72.     dlgSave.FileName := 'weapons.csv';
  73.     if dlgSave.Execute then
  74.       slArmo.SaveToFile(dlgSave.FileName);
  75.     dlgSave.Free;
  76.   end;
  77.  
  78.   slArmo.Free;
  79.   slValues.Free;
  80.   slLookup.Free;
  81.  
  82.  end;
  83.  
  84. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement