Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- Update references in skywind
- }
- unit UserScript;
- var
- posx, posy, posz, rotx, roty, rotz: single;
- objOld, objNew: string;
- RefCount: integer;
- function OptionsWindow: integer;
- var
- frm: TForm;
- btnOk, btnCancel: TButton;
- edObjOld, edObjNew, edX, edY, edZ, edXRot, edYRot, edZRot: TEdit;
- lbl1, lbl2, lblPos, lblRot: TLabel;
- i: integer;
- begin
- frm := TForm.Create(nil);
- try
- frm.Caption := 'Skywind references adjuster';
- frm.Width := 280;
- frm.Height := 300;
- frm.Position := poMainFormCenter;
- frm.BorderStyle := bsDialog;
- btnOk := TButton.Create(frm);
- btnOk.Parent := frm;
- btnOk.Caption := 'OK';
- btnOk.ModalResult := mrOk;
- btnOk.Left := 90;
- btnOk.Top := 230;
- btnCancel := TButton.Create(frm);
- btnCancel.Parent := frm;
- btnCancel.Caption := 'Cancel';
- btnCancel.ModalResult := mrCancel;
- btnCancel.Left := btnOk.Left + btnOk.Width + 16;
- btnCancel.Top := btnOk.Top;
- edObjOld := TEdit.Create(frm);
- edObjOld.Parent := frm;
- edObjOld.Left := 8;
- edObjOld.Top := 28;
- edObjOld.Width := frm.Width - 40;
- lbl1 := TLabel.Create(frm);
- lbl1.Parent := frm;
- lbl1.Top := edObjOld.Top - 16;
- lbl1.Left := edObjOld.Left;
- lbl1.Caption := 'EditorID of base object to update refs';
- edObjNew := TEdit.Create(frm);
- edObjNew.Parent := frm;
- edObjNew.Left := 8;
- edObjNew.Top := edObjOld.Top + 48;
- edObjNew.Width := frm.Width - 40;
- lbl2 := TLabel.Create(frm);
- lbl2.Parent := frm;
- lbl2.Top := edObjNew.Top - 16;
- lbl2.Left := edObjNew.Left;
- lbl2.Caption := 'Replace with new object';
- edX := TEdit.Create(frm);
- edX.Parent := frm;
- edX.Left := 8;
- edX.Top := edObjNew.Top + 48;
- edX.Width := 40;
- edY := TEdit.Create(frm);
- edY.Parent := frm;
- edY.Left := 58;
- edY.Top := edX.Top;
- edY.Width := 40;
- edZ := TEdit.Create(frm);
- edZ.Parent := frm;
- edZ.Left := 108;
- edZ.Top := edX.Top;
- edZ.Width := 40;
- lblPos := TLabel.Create(frm);
- lblPos.Parent := frm;
- lblPos.Top := edX.Top - 16;
- lblPos.Left := edX.Left;
- lblPos.Caption := 'Adjust Position X Y Z';
- edXRot := TEdit.Create(frm);
- edXRot.Parent := frm;
- edXRot.Left := 8;
- edXRot.Top := edX.Top + 48;
- edXRot.Width := 40;
- edYRot := TEdit.Create(frm);
- edYRot.Parent := frm;
- edYRot.Left := 58;
- edYRot.Top := edXRot.Top;
- edYRot.Width := 40;
- edZRot := TEdit.Create(frm);
- edZRot.Parent := frm;
- edZRot.Left := 108;
- edZRot.Top := edXRot.Top;
- edZRot.Width := 40;
- lblRot := TLabel.Create(frm);
- lblRot.Parent := frm;
- lblRot.Top := edXRot.Top - 16;
- lblRot.Left := edXRot.Left;
- lblRot.Caption := 'Adjust Rotation X Y Z';
- if frm.ShowModal = mrOk then begin
- objOld := Trim(edObjOld.Text);
- objNew := Trim(edObjNew.Text);
- posx := StrToFloatDef(edX.Text, 0);
- posy := StrToFloatDef(edY.Text, 0);
- posz := StrToFloatDef(edZ.Text, 0);
- rotx := StrToFloatDef(edXRot.Text, 0);
- roty := StrToFloatDef(edYRot.Text, 0);
- rotz := StrToFloatDef(edZRot.Text, 0);
- end else
- Result := 1;
- finally
- frm.Free;
- end;
- end;
- function Initialize: integer;
- begin
- Result := OptionsWindow;
- RefCount := 0;
- end;
- procedure AdjustPos(e: IInterface; v: single);
- var
- newv: single;
- begin
- if v = 0 then Exit;
- newv := GetNativeValue(e) + v;
- SetNativeValue(e, newv);
- end;
- procedure AdjustRot(e: IInterface; v: single);
- var
- newv: single;
- begin
- if v = 0 then Exit;
- newv := GetNativeValue(e) + v;
- if newv >= 360 then newv := newv - 360 else
- if newv < 0 then newv := newv + 360;
- SetNativeValue(e, newv);
- end;
- function Process(e: IInterface): integer;
- var
- s: string;
- begin
- s := Signature(e);
- if (s <> 'REFR') and (s <> 'ACHR') then
- Exit;
- if EditorID(LinksTo(ElementBySignature(e, 'NAME'))) <> objOld then
- Exit;
- if objNew <> '' then SetElementEditValues(e, 'NAME', objNew);
- AdjustPos(ElementByPath(e, 'DATA\Position\X'), posx);
- AdjustPos(ElementByPath(e, 'DATA\Position\Y'), posy);
- AdjustPos(ElementByPath(e, 'DATA\Position\Z'), posz);
- AdjustRot(ElementByPath(e, 'DATA\Rotation\X'), rotx);
- AdjustRot(ElementByPath(e, 'DATA\Rotation\Y'), roty);
- AdjustRot(ElementByPath(e, 'DATA\Rotation\Z'), rotz);
- Inc(RefCount);
- end;
- function Finalize: integer;
- begin
- AddMessage(Format('Done, updated %d reference(s)', [RefCount]));
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement