Talk:Summon Object

There are no discussions on this page.
Revision as of 12:08, 9 June 2011 by imported>DragoonWraith (added signature for Chaosregen)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Hey everyone. I'm using this code here to summon a trunk to me however is there a way to modify it to summon 2 trunks instead of 1 IE 2 different trunks and separate them from each other.???? --Chaosregen 23:28, 8 June 2011 (EDT)

Sure. First you need two trunks, both of which are persistent references, and you need to give them ReferenceIDs. This tutorial has only one named wrSleepBedRef; I'll assume you have two named wrSleepBedRef1 and wrSleepBedRef2 respectively.
Next, you need to separate them from each other a bit. This code uses a numerical approximation method for sin and cos, which I think is... kind of ridiculous, personally. I recommend that you just use OBSE for those functions; it's much simple and will give you better performance.
You don't have to though; point is, instead of using player.GetAngle Z for your angle (that you find the cos and sin of; note the differences between GetAngle and normal mathematical angle notation), you should use, say, player.GetAngle Z + 15 and player.GetAngle Z - 15 for your two trunks.
With OBSE, this is easy:
Begin ScriptEffectStart

  wrSleepBedRef1.disable
  wrSleepBedRef2.disable

End

Begin _ScriptEffectFinish ; the _ before ScriptEffectFinish enables the compiler override

  let angle1 := player.GetAngle Z - 15
  if ( angle1 < 90 ) ; this code comes from GetAngle
    let angle1 := 90 - angle1
  else
    let angle1 := 450 - angle1
  endif

  wrSleepBedRef1.MoveTo player
  wrSleepBedRef1.SetPos X (player.GetPos X + (cos angle1)) ; the compiler override
  wrSleepBedRef1.SetPos Y (player.GetPos Y + (sin angle1)) ; allows these to work
  wrSleepBedRef1.SetPos Z (player.GetPos Z + 55) ; assuming the tutorial's right about the offset

  wrSleepBedRef1.SetAngle X 0
  wrSleepBedRef1.SetAngle Y 0
  wrSleepBedRef1.SetAngle Z (player.GetAngle Z + 75) ; 75 = 90-15

  let angle2 := player.GetAngle Z + 15
  ; copy everything for wrSleepBedRef1 and apply it to wrSleepBedRef2, switching angle1 for angle2
End
Like I said, you can continue to use the non-OBSE method described in the article; you'll just need to go through that entire process of determining the since and cosine for each angle.
I hope that helps!
Dragoon Wraith TALK 10:42, 9 June 2011 (EDT)
Return to "Summon Object" page.