Advertisement
Guest User

Untitled

a guest
Oct 7th, 2015
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.52 KB | None | 0 0
  1. {
  2. Update references in skywind
  3. }
  4. unit UserScript;
  5.  
  6. var
  7. posx, posy, posz, rotx, roty, rotz: single;
  8. objOld, objNew: string;
  9. RefCount: integer;
  10.  
  11. function OptionsWindow: integer;
  12. var
  13. frm: TForm;
  14. btnOk, btnCancel: TButton;
  15. edObjOld, edObjNew, edX, edY, edZ, edXRot, edYRot, edZRot: TEdit;
  16. lbl1, lbl2, lblPos, lblRot: TLabel;
  17. i: integer;
  18. begin
  19. frm := TForm.Create(nil);
  20. try
  21. frm.Caption := 'Skywind references adjuster';
  22. frm.Width := 280;
  23. frm.Height := 300;
  24. frm.Position := poMainFormCenter;
  25. frm.BorderStyle := bsDialog;
  26.  
  27. btnOk := TButton.Create(frm);
  28. btnOk.Parent := frm;
  29. btnOk.Caption := 'OK';
  30. btnOk.ModalResult := mrOk;
  31. btnOk.Left := 90;
  32. btnOk.Top := 230;
  33.  
  34. btnCancel := TButton.Create(frm);
  35. btnCancel.Parent := frm;
  36. btnCancel.Caption := 'Cancel';
  37. btnCancel.ModalResult := mrCancel;
  38. btnCancel.Left := btnOk.Left + btnOk.Width + 16;
  39. btnCancel.Top := btnOk.Top;
  40.  
  41. edObjOld := TEdit.Create(frm);
  42. edObjOld.Parent := frm;
  43. edObjOld.Left := 8;
  44. edObjOld.Top := 28;
  45. edObjOld.Width := frm.Width - 40;
  46. lbl1 := TLabel.Create(frm);
  47. lbl1.Parent := frm;
  48. lbl1.Top := edObjOld.Top - 16;
  49. lbl1.Left := edObjOld.Left;
  50. lbl1.Caption := 'EditorID of base object to update refs';
  51.  
  52. edObjNew := TEdit.Create(frm);
  53. edObjNew.Parent := frm;
  54. edObjNew.Left := 8;
  55. edObjNew.Top := edObjOld.Top + 48;
  56. edObjNew.Width := frm.Width - 40;
  57. lbl2 := TLabel.Create(frm);
  58. lbl2.Parent := frm;
  59. lbl2.Top := edObjNew.Top - 16;
  60. lbl2.Left := edObjNew.Left;
  61. lbl2.Caption := 'Replace with new object';
  62.  
  63. edX := TEdit.Create(frm);
  64. edX.Parent := frm;
  65. edX.Left := 8;
  66. edX.Top := edObjNew.Top + 48;
  67. edX.Width := 40;
  68. edY := TEdit.Create(frm);
  69. edY.Parent := frm;
  70. edY.Left := 58;
  71. edY.Top := edX.Top;
  72. edY.Width := 40;
  73. edZ := TEdit.Create(frm);
  74. edZ.Parent := frm;
  75. edZ.Left := 108;
  76. edZ.Top := edX.Top;
  77. edZ.Width := 40;
  78. lblPos := TLabel.Create(frm);
  79. lblPos.Parent := frm;
  80. lblPos.Top := edX.Top - 16;
  81. lblPos.Left := edX.Left;
  82. lblPos.Caption := 'Adjust Position X Y Z';
  83.  
  84. edXRot := TEdit.Create(frm);
  85. edXRot.Parent := frm;
  86. edXRot.Left := 8;
  87. edXRot.Top := edX.Top + 48;
  88. edXRot.Width := 40;
  89. edYRot := TEdit.Create(frm);
  90. edYRot.Parent := frm;
  91. edYRot.Left := 58;
  92. edYRot.Top := edXRot.Top;
  93. edYRot.Width := 40;
  94. edZRot := TEdit.Create(frm);
  95. edZRot.Parent := frm;
  96. edZRot.Left := 108;
  97. edZRot.Top := edXRot.Top;
  98. edZRot.Width := 40;
  99. lblRot := TLabel.Create(frm);
  100. lblRot.Parent := frm;
  101. lblRot.Top := edXRot.Top - 16;
  102. lblRot.Left := edXRot.Left;
  103. lblRot.Caption := 'Adjust Rotation X Y Z';
  104.  
  105. if frm.ShowModal = mrOk then begin
  106. objOld := Trim(edObjOld.Text);
  107. objNew := Trim(edObjNew.Text);
  108. posx := StrToFloatDef(edX.Text, 0);
  109. posy := StrToFloatDef(edY.Text, 0);
  110. posz := StrToFloatDef(edZ.Text, 0);
  111. rotx := StrToFloatDef(edXRot.Text, 0);
  112. roty := StrToFloatDef(edYRot.Text, 0);
  113. rotz := StrToFloatDef(edZRot.Text, 0);
  114. end else
  115. Result := 1;
  116.  
  117. finally
  118. frm.Free;
  119. end;
  120. end;
  121.  
  122. function Initialize: integer;
  123. begin
  124. Result := OptionsWindow;
  125. RefCount := 0;
  126. end;
  127.  
  128. procedure AdjustPos(e: IInterface; v: single);
  129. var
  130. newv: single;
  131. begin
  132. if v = 0 then Exit;
  133. newv := GetNativeValue(e) + v;
  134. SetNativeValue(e, newv);
  135. end;
  136.  
  137. procedure AdjustRot(e: IInterface; v: single);
  138. var
  139. newv: single;
  140. begin
  141. if v = 0 then Exit;
  142. newv := GetNativeValue(e) + v;
  143. if newv >= 360 then newv := newv - 360 else
  144. if newv < 0 then newv := newv + 360;
  145. SetNativeValue(e, newv);
  146. end;
  147.  
  148. function Process(e: IInterface): integer;
  149. var
  150. s: string;
  151. begin
  152. s := Signature(e);
  153.  
  154. if (s <> 'REFR') and (s <> 'ACHR') then
  155. Exit;
  156.  
  157. if EditorID(LinksTo(ElementBySignature(e, 'NAME'))) <> objOld then
  158. Exit;
  159.  
  160. if objNew <> '' then SetElementEditValues(e, 'NAME', objNew);
  161. AdjustPos(ElementByPath(e, 'DATA\Position\X'), posx);
  162. AdjustPos(ElementByPath(e, 'DATA\Position\Y'), posy);
  163. AdjustPos(ElementByPath(e, 'DATA\Position\Z'), posz);
  164. AdjustRot(ElementByPath(e, 'DATA\Rotation\X'), rotx);
  165. AdjustRot(ElementByPath(e, 'DATA\Rotation\Y'), roty);
  166. AdjustRot(ElementByPath(e, 'DATA\Rotation\Z'), rotz);
  167.  
  168. Inc(RefCount);
  169. end;
  170.  
  171. function Finalize: integer;
  172. begin
  173. AddMessage(Format('Done, updated %d reference(s)', [RefCount]));
  174. end;
  175.  
  176. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement