Quantcast

Jump to content

» «
Photo

[SA] Find max range between 'camera' and aim point

1 reply to this topic
jackusCTB
  • jackusCTB

    Peon

  • Members
  • Joined: 29 Jun 2012
  • Belgium

#1

Posted 08 July 2013 - 04:47 PM

Hello, using Wesser's Laser functionI wrote the code below. What it does is simply add a red corona and eventually an explosion if you press secondary fire (LCTRL - RALT as default) at player aiming point XYZ coords, at the desired range (in this case, [email protected] = 100.0).
What I would like to change about the range, is its value: I prepared these 4 images taken from in-game footage to better explain.

user posted image
user posted image

The explosion doesn't hit the chopper because of the range limitation. The explosion happened 100 metres away from our chopper, while the target chopper was probably 120-150 metres away from us.

user posted image
user posted image

The explosion destroyed the target helicopter because it was exactly at our range of 100 metres.
Let's say we were 50 metres away from the enemy chopper, we wouldn't have destroyed it because the explosion would've been under the stadium roof (100 metres from our chopper)

CODE
{$CLEO .cs}

0000: NOP

{
[email protected] - Player vehicle
[email protected] - range
[email protected] - 'camera' X point
[email protected] - 'camera' Y point
[email protected] - 'camera' Z point
[email protected] - target X point
[email protected] - target Y point
[email protected] - target Z point
}

[email protected] = 100.0 // 100 metres

:check
wait 0
if and
Player.Defined($PLAYER_CHAR)
Actor.DrivingVehicleType($PLAYER_ACTOR, #SPARROW)
jf @check
03C0: [email protected] = actor $PLAYER_ACTOR car

:loop
Actor.StorePos($PLAYER_ACTOR, [email protected], [email protected], [email protected])
0AB1: call_scm_func @getAimPoint 4 range [email protected] from [email protected] [email protected] [email protected] camera_to [email protected] [email protected] [email protected] point_to [email protected] [email protected] [email protected]
04D5: create_corona_at [email protected] [email protected] [email protected] radius 10.0 type 0 flare 0 RGB 255 0 0 // creates a corona [email protected] metres away from 'camera' point to aim point
if
00E1: player 0 pressed_key 4
jf @check
020C: create_explosion_with_radius 0 at [email protected] [email protected] [email protected]
jump @check

//----------------------------------------------------------

:getAimPoint
{
Parameters:
† Passed:
† † [email protected] - aiming range
† † [email protected] - start point X
† † [email protected] - start point Y
† † [email protected] - start point Z
† Result:
† † [email protected] - camera point X
† † [email protected] - camera point Y
† † [email protected] - camera point Z
† † [email protected] - aim point X
† † [email protected] - aim point Y
† † [email protected] - aim point Z

Example:
† 0AB1: call_scm_func @getAimPoint 4 range 20.0 from 0.0 0.0 0.0 camera_to [email protected] [email protected] [email protected] point_to [email protected] [email protected] [email protected]
}
0A9F: [email protected] = current_thread_pointer
0AB1: call_scm_func @getLocalVarOffset 2 thread [email protected] var 4 store_to [email protected]
0AB1: call_scm_func @getLocalVarOffset 2 thread [email protected] var 7 store_to [email protected]
0AA6: call_method 0x514970 struct 0xB6F028 num_params 6 pop 0 pPoint [email protected] pCamera [email protected] fOriginZ [email protected] fOriginY [email protected] fOriginX [email protected] fRange [email protected] // CCamera__Find3rdPersonCamTargetVector
0AB2: ret 6 [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]

:getLocalVarOffset
{
Parameters:
† Passed:
† † [email protected] - thread pointer
† † [email protected] - var number
† Result:
† † [email protected] - var value

Example:
† 0AB1: call_scm_func @getLocalVarOffset 2 thread [email protected] var 0 store_to [email protected]
}
if
[email protected] <> 0
then
[email protected] *= 0x4
0A8E: [email protected] = [email protected] + 0xDC // mission flag
if
[email protected] == 1
then
[email protected] += 0xA48960 // mission locals
else
† 005A: [email protected] += [email protected]
[email protected] += 0x3C
end
else
[email protected] = 0
end
0AB2: ret 1 [email protected]

jackusCTB
  • jackusCTB

    Peon

  • Members
  • Joined: 29 Jun 2012
  • Belgium

#2

Posted 10 July 2013 - 04:47 PM

-bump-




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users