CLEO Help Fix cleo

CLEO related

SobFoX

Expert
Joined
Jul 14, 2015
Messages
1,386
Solutions
4
Reaction score
893
Location
Israel
help me pls
JavaScript:
{
    * WILL ONLY WORK ON SAMP 0.3.DL
    * If you want this script to work on other SAMP Versions, Modify the Memory Pointers of Snippet Named "GetCheckPointPositions" found at "Functions" Area
    * Type "PLEASEDRIVE" to toggle autodriving
    * SCM AI Manipulation is Based on:
        - https://gtaforums.com/topic/403594-sa-~-cleo-script-tutorial-~/?tab=comments#comment-1059452423
}
    // ~~~~~~~~~~~Used Headers~~~~~~~~~~~
{$CLEO}
    // ~~~~~~~~~~~End of Used Headers~~~~~~~~~~~

    // ~~~~~~~~~~~Script Initial Setup~~~~~~~~~~~
0000: CheckPoint Seeker Driver by AJOM

const
    MYVEHICLE = 31@

    MYPOSITIONX = 30@
    MYPOSITIONY = 29@
    MYPOSITIONZ = 28@

    CHECKPOINTX = 27@
    CHECKPOINTY = 26@
    CHECKPOINTZ = 25@
    CHECKPOINTRADIUS = 24@

    IMPROVEDCHECKPOINTX = 23@
    IMPROVEDCHECKPOINTY = 22@
    IMPROVEDCHECKPOINTZ = 21@

    OLDCHECKPOINTX = 20@
    OLDCHECKPOINTY = 19@
    OLDCHECKPOINTZ = 18@
    DRIVINGSTYLE = 17@
end
    // ~~~~~~~~~~~End of Script Initial Setup~~~~~~~~~~~

:initialization
    wait 0
        // ~~~~~~~~~~~Activation Stage~~~~~~~~~~~
    if and
        0ADC: test_cheat "PLEASEDRIVE"
        00DF: actor $PLAYER_ACTOR driving
    004D: jump_if_false @initialization
    03C0: MYVEHICLE = actor $PLAYER_ACTOR car
    046C: 4@ = car MYVEHICLE driver
    if 07D6: 4@ == $PLAYER_ACTOR
    004D: jump_if_false @initialization
    /* if 0AB1: @GetCheckPointPositions 1 _Mode 4 _StoreXYZ CHECKPOINTX CHECKPOINTY CHECKPOINTZ _StoreXYRadius CHECKPOINTRADIUS
    then
    else
        0ACD: show_text_highpriority "~r~No CheckPoints Found!~n~Try Again Later." time 2000
        0002: jump @initialization
    end */
        // ~~~~~~~~~~~End of Activation Stage~~~~~~~~~~~

        // ~~~~~~~~~~~Car Initialization Stage~~~~~~~~~~~
    DRIVINGSTYLE = 0 // used for land vehicles
    03CC: enable_car MYVEHICLE stuck_check_distance_to 2.0 time_to 500
    00AE: set_car MYVEHICLE traffic_behaviour_to 2 // avoid obstacles + ignore traffic lights
    // 0423: set_car MYVEHICLE improved_handling_to 5.0
    00AD: set_car MYVEHICLE AI_max_speed_to 999999.0 // the AI will use its maximum allowable speed
        // ~~~~~~~~~~~End of Car Initialization Stage~~~~~~~~~~~

    0ACD: show_text_highpriority "~y~AJOM's Basic CheckPoint Driver:~g~ENABLED" time 2000
:doautodriving
    wait 0
        // ~~~~~~~~~~~Possible Deactivation Stage~~~~~~~~~~~
    if or
        0ADC: test_cheat "PLEASEDRIVE"
        80DF: not actor $PLAYER_ACTOR driving
        856E: not car MYVEHICLE defined
    then
        :disableutodriving
        if 056E: car MYVEHICLE defined
        then 03A2: set_car MYVEHICLE status_to 0 // Stop the AI and let us drive again
        end
        0ACD: show_text_highpriority "~y~AJOM's Basic CheckPoint Driver:~r~DISABLED" time 2000
        0002: jump @initialization
    end
    if 8185: not car MYVEHICLE health >= 241
    then
        0622: AS_actor $PLAYER_ACTOR bail_car MYVEHICLE
        0ACD: show_text_highpriority "~y~AJOM's Basic CheckPoint Driver:~r~DISABLED Bailed from Burning Car" time 2000
        0002: jump @initialization
    end
    if 0AB1: @GetCheckPointPositions 1 _Mode 4 _StoreXYZ CHECKPOINTX CHECKPOINTY CHECKPOINTZ _StoreXYRadius CHECKPOINTRADIUS
    then
    else :manualdrivingoverride // while there are no checkpoints, temporarily allow us to drive our vehicle
        if DRIVINGSTYLE <> 0
        then DRIVINGSTYLE = 0 // Force the AI to reset the destination
        end
        03A2: set_car MYVEHICLE status_to 0
        0002: jump @doautodriving
    end
        // ~~~~~~~~~~~End of Possible Deactivation Stage~~~~~~~~~~~

        // ~~~~~~~~~~~Manual Driving Override Stage~~~~~~~~~~~ Allows us to drive if Game Control Keys are being pressed
    for 0@ = 0xB73458 to 0xB73466 step 0x4
        0A8D: 1@ = read_memory 0@ size 0x4 virtual_protect 0
        if 1@ == 0
        004D: jump_if_false @manualdrivingoverride
    end
    0A8D: 0@ = read_memory 0xB73474 size 0x4 virtual_protect 0
    0A8D: 1@ = read_memory 0xB73478 size 0x4 virtual_protect 0
    if and
        0@ == 0
        1@ == 0
    004D: jump_if_false @manualdrivingoverride
    if 04AB: actor $PLAYER_ACTOR driving_plane
    then
        0A8D: 0@ = read_memory 0xB7347E size 0x2 virtual_protect 0
        if 0@ <> 0
        then
            wait 500 // submission delay before activation of autodriving once again
            0002: jump @manualdrivingoverride
        end
    end
        // ~~~~~~~~~~~End of Manual Driving Override Stage~~~~~~~~~~~

        // ~~~~~~~~~~~Near CheckPoint Detection Stage~~~~~~~~~~~
    00AA: store_car MYVEHICLE position_to MYPOSITIONX MYPOSITIONY MYPOSITIONZ
    0509: 4@ = distance_between_XY CHECKPOINTX CHECKPOINTY and_XY MYPOSITIONX MYPOSITIONY
    if 0035: CHECKPOINTRADIUS >= 4@ // if we are near to the checkpoint
    then
        if 0AB1: @GetCheckPointPositions 1 _Mode 2 _StoreXYZ 4@ 5@ 6@ _StoreXYRadius 7@ // try using next checkpoint
        then
            if or
                4@ <> 0.0
                5@ <> 0.0
                6@ <> 0.0
            then // use Next CheckPoint Position
                0087: CHECKPOINTX = 4@
                0087: CHECKPOINTY = 5@
                0087: CHECKPOINTZ = 6@
                0087: CHECKPOINTRADIUS = 7@
            end
        end
    end
        // ~~~~~~~~~~~End of Near CheckPoint Detection Stage~~~~~~~~~~~

        // ~~~~~~~~~~~CheckPoint Position Improver Stage~~~~~~~~~~~
    0AB1: @GetPointToPointTrueNorthAngles 6 _FromXYZ MYPOSITIONX MYPOSITIONY MYPOSITIONZ _ToXYZ CHECKPOINTX CHECKPOINTY CHECKPOINTZ _StoreAngleX 5@ _StoreAngleZ 6@
    02E3: 7@ = car MYVEHICLE speed
    if 0025: CHECKPOINTRADIUS > 7@ // speed is slower against the checkpoint radius
    then 0087: 7@ = CHECKPOINTRADIUS // use the radius as excess distance
    end
    0AB1: @get3DXYZInFrontOfTrueNorth 6 _XYZ CHECKPOINTX CHECKPOINTY CHECKPOINTZ _ZAngle 6@ _XAngle 5@  _Distance 7@ _ReturnXYZ IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ
        // ~~~~~~~~~~~End of CheckPoint Position Improver Stage~~~~~~~~~~~

        // ~~~~~~~~~~~AI Decision Stage~~~~~~~~~~~
    if 04A7: actor $PLAYER_ACTOR driving_boat
    then 02D3: boat MYVEHICLE sail_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ
    else
        if 04A9: actor $PLAYER_ACTOR driving_heli
        then 0743: heli MYVEHICLE fly_then_land_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ altitude 60.0 to 120.0
        else
            if 04AB: actor $PLAYER_ACTOR driving_plane
            then 04D2: set_plane MYVEHICLE fly_autopilot_around_point IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ altitude_between 60.0 and 120.0
            else
                    /* For Tracing the Route, REQUIRES SAMPFUNCS
                0B55: convert_3D_coords MYPOSITIONX MYPOSITIONY MYPOSITIONZ to_screen 0@ 1@
                0B55: convert_3D_coords IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ to_screen 2@ 3@
                0B68: render draw_line_point1 0@ 1@ point2 2@ 3@ width 1 color 0xFF00FF00
                    */
                if or // if we have a new checkpoint
                    8045: OLDCHECKPOINTX <> CHECKPOINTX
                    8045: OLDCHECKPOINTY <> CHECKPOINTY
                    8045: OLDCHECKPOINTZ <> CHECKPOINTZ
                then
                    0087: OLDCHECKPOINTX = CHECKPOINTX
                    0087: OLDCHECKPOINTY = CHECKPOINTY
                    0087: OLDCHECKPOINTZ = CHECKPOINTZ
                    DRIVINGSTYLE = 0 // Force the AI to reset the destination
                end
                00AA: store_car MYVEHICLE position_to 4@ 5@ 6@
                02E3: 7@ = car MYVEHICLE speed
                if and
                    83CE: not car MYVEHICLE stuck
                    7@ > 1.0
                    06BD: no_obstacles_between IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ and 4@ 5@ 6@ solid 1 car 0 actor 0 object 1 particle 0
                    // 8AE3: 7@ = not random_object_near_point 4@ 5@ 6@ in_radius 10.0 find_next 0
                then // do an obstacle free driving
                    if DRIVINGSTYLE <> 1 // avoids resetting the task variables of AI decision making
                    then
                        DRIVINGSTYLE = 1
                        00AF: set_car MYVEHICLE driver_behaviour_to 8 // ignore road-paths
                        04E0: car MYVEHICLE abandon_path_radius 999999 // always drive in straight line
                        // 00A7: car MYVEHICLE drive_basic_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ
                        02C2: car MYVEHICLE drive_accurate_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ
                    end
                else // do an obstacle smart driving
                    if DRIVINGSTYLE <> 2 // avoids resetting the task variables of AI decision making
                    then
                        DRIVINGSTYLE = 2
                        00AF: set_car MYVEHICLE driver_behaviour_to 1 // follow road, drive back if way is blocked
                        04E0: car MYVEHICLE abandon_path_radius 0 // never-ever drive straight
                        0704: car MYVEHICLE racedrive_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ // use racing AI
                    end
                end
            end
        end
    end
        // ~~~~~~~~~~~End of AI Decision Stage~~~~~~~~~~~
0002: jump @doautodriving

// ~~~~~~~~~~~Functions~~~~~~~~~~~

:GetPointToPointTrueNorthAngles // 0AB1: @GetPointToPointTrueNorthAngles 6 _FromXYZ 0@ 1@ 2@ _ToXYZ 3@ 4@ 5@ _StoreAngleX 31@ _StoreAngleZ 30@
    // Snippet by AJOM
    // ~~~~~~~~~~~get z-angle towards the target
0087: 30@ = 4@ // Y2
0063: 30@ -= 1@  // Y1
0087: 31@ = 3@ // X2
0063: 31@ -= 0@  // X1
0AA5: _atan2 | 0x4207C0 2 2 | _X 31@ _Y 30@
0AE9: pop_float 30@ // store result from above operation
30@ *= 57.295779817106167876798171061675 // radians to degrees
30@ -= 90.0 // TrueNorth's z-angle lags 90 degrees
    //
    // ~~~~~~~~~~~get x-angle towards the target
0087: 31@ = 5@ // Z2
0063: 31@ -= 2@  // Z1
0509: 29@ = distance_between_XY 0@ 1@ and_XY 3@ 4@ // adjacent side
0AA5: _atan2 | 0x4207C0 2 2 | _X 29@ _Y 31@
0AE9: pop_float 31@ // store result from above operation
31@ *= 57.295779817106167876798171061675 // radians to degrees
    //
0AB2: cleo_return 2 _fAngleX 31@ _fAngleZ 30@

:get3DXYZInFrontOfTrueNorth // 0AB1: @get3DXYZInFrontOfTrueNorth 6 _XYZ 0@ 1@ 2@ _ZAngle 3@ _XAngle 4@  _Distance 5@ _ReturnXYZ 0@ 1@ 2@
    {
        Snippet By AJOM
        Based on Source: http://danceswithcode.net/engineeringnotes/rotations_in_3d/rotations_in_3d_part2.html
        But Using:
            X0 = _Distance = 5@ , Y0 = 0.0 , Z0 = 0.0
            Yaw = _ZAngle = 3@ , Pitch = _XAngle = 4@ , Roll = 0.0
    }
        // Use Opcode.eXe's Coordinate system
    4@ += 180.0 // WorldXAngle = TrueNorthXAngle + 180.0
    3@ += 270.0 // WorldZAngle = (TrueNorthZAngle + 90.0) + 180.0 // we add another 180.0 degrees because we halfy revolve over the World X angle
        //
   
        // Compute X Offset = Cos(Pitch)*Cos(Yaw)*X0
    02F7: 31@ = cosine 4@ // (float)
    02F7: 30@ = cosine 3@ // (float)
    006B: 31@ *= 30@ // (float)
    006B: 31@ *= 5@ // (float)
        //
        // Compute Y Offset = Cos(Pitch)*Sin(Yaw)*X0
    02F7: 30@ = cosine 4@ // (float)
    02F6: 29@ = sine 3@ // (float)
    006B: 30@ *= 29@ // (float)
    006B: 30@ *= 5@ // (float)
        //
        // Compute Z Offset = -Sin(Pitch)*X0
    02F6: 29@ = sine 4@ // (float)
    006B: 29@ *= 5@ // (float)
    29@ *= -1.0
        //
    005B: 0@ += 31@ // New X
    005B: 1@ += 30@ // New Y
    005B: 2@ += 29@ // New Z
0AB2: ret 3 0@ 1@ 2@

// For SAMP Versions other than 0.3.7 R1, go to this link and replace GetCheckPointPositions Snippet into its respective version:
//
:GetCheckPointPositions
{
    0AB1: @GetCheckPointPositions 1 _Mode 0@ _StoreXYZ 19@ 18@ 17@ _StoreXYRadius 16@
        _Mode = 0 --> Normal Checkpoint
        _Mode = 1 --> Primary/Current Race Checkpoint
        _Mode = 2 --> Secondary/Next Race Checkpoint
        _Mode = 3 --> ANY Checkpoint(Priority Normal CheckPoint)
        _Mode = 4 --> ANY Checkpoint(Priority Current Race CheckPoint)
        _Mode = 5 --> ANY Checkpoint(Priority Next Race CheckPoint)
}
if 0AA2: 31@ = load_dynamic_library "samp.dll"
then
    31@ += 0x2ACA3C
    0A8D: 31@ = read_memory 31@ size 4 virtual_protect 0 // pMiscnfo
    31@ += 12
    0A8D: 30@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointPosX
    31@ += 4
    0A8D: 29@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointPosY
    31@ += 4
    0A8D: 28@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointPosZ
   
    31@ += 4
    0A8D: 15@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointExtentX
    31@ += 4
    0A8D: 13@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointExtentY
    005B: 15@ += 13@
    15@ /= 2.0

    31@ += 8
    0A8D: 27@ = read_memory 31@ size 4 virtual_protect 0 // bCheckpointsEnabled
    31@ += 8
    0A8D: 26@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointPosX
    31@ += 4
    0A8D: 25@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointPosY
    31@ += 4
    0A8D: 24@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointPosZ
    31@ += 4
    0A8D: 23@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointNextX
    31@ += 4
    0A8D: 22@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointNextY
    31@ += 4
    0A8D: 21@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointNextZ

    31@ += 4
    0A8D: 14@ = read_memory 31@ size 4 virtual_protect 0 // m_fRaceCheckpointSize

    31@ += 5
    0A8D: 20@ = read_memory 31@ size 4 virtual_protect 0 // bRaceCheckpointsEnabled
    if 0@ == 0 // Normal CheckPoint Only
    then
        :passnormalcheckpoint
        if 27@ == true // Normal CheckPoint Exists Somewhere
        then
            0087: 19@ = 30@
            0087: 18@ = 29@
            0087: 17@ = 28@
            0087: 16@ = 15@
            0485:  return_true
        else 059A:  return_false
        end
    else
        if 0@ == 1 // Current Race CheckPoint Only
        then
            :passcurrentracecheckpoint
            if 20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
            then
                0087: 19@ = 26@
                0087: 18@ = 25@
                0087: 17@ = 24@
                0087: 16@ = 14@
                0485:  return_true
            else 059A:  return_false
            end
        else
            if 0@ == 2 // Next Race CheckPoints Only
            then
                :passnextracecheckpoint
                if 20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
                then
                    0087: 19@ = 23@
                    0087: 18@ = 22@
                    0087: 17@ = 21@
                    0087: 16@ = 14@
                    0485:  return_true
                else 059A:  return_false
                end
            else // Any checkpoints is acceptable
                if or
                    27@ == true // Normal CheckPoint Exists Somewhere
                    20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
                then
                    if 0@ == 5 // priority Next Race CheckPoint
                    then
                        if 20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
                        then 0002: jump @passnextracecheckpoint
                        else 0002: jump @passnormalcheckpoint
                        end
                    else
                        if 0@ == 4 // priority Current Race CheckPoint
                        then
                            if 20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
                            then 0002: jump @passcurrentracecheckpoint
                            else 0002: jump @passnormalcheckpoint
                            end
                        else
                            if 27@ == true // Normal CheckPoint Exists Somewhere
                            then 0002: jump @passnormalcheckpoint
                            else 0002: jump @passcurrentracecheckpoint
                            end
                        end
                    end
                else 059A:  return_false
                end
            end
        end
    end
else 059A:  return_false
end
0AB2: cleo_return 4 _XYZ 19@ 18@ 17@ _Radius 16@

// ~~~~~~~~~~~End of Functions~~~~~~~~~~~
 

xdaohuunhatx

Member
Joined
Apr 24, 2019
Messages
10
Reaction score
0
JavaScript:
{
    * WILL ONLY WORK ON SAMP 0.3.DL
    * If you want this script to work on other SAMP Versions, Modify the Memory Pointers of Snippet Named "GetCheckPointPositions" found at "Functions" Area
    * Type "PLEASEDRIVE" to toggle autodriving
    * SCM AI Manipulation is Based on:
        - https://gtaforums.com/topic/403594-sa-~-cleo-script-tutorial-~/?tab=comments#comment-1059452423
}
    // ~~~~~~~~~~~Used Headers~~~~~~~~~~~
{$CLEO}
    // ~~~~~~~~~~~End of Used Headers~~~~~~~~~~~

    // ~~~~~~~~~~~Script Initial Setup~~~~~~~~~~~
0000: CheckPoint Seeker Driver by AJOM

const
    MYVEHICLE = 31@

    MYPOSITIONX = 30@
    MYPOSITIONY = 29@
    MYPOSITIONZ = 28@

    CHECKPOINTX = 27@
    CHECKPOINTY = 26@
    CHECKPOINTZ = 25@
    CHECKPOINTRADIUS = 24@

    IMPROVEDCHECKPOINTX = 23@
    IMPROVEDCHECKPOINTY = 22@
    IMPROVEDCHECKPOINTZ = 21@

    OLDCHECKPOINTX = 20@
    OLDCHECKPOINTY = 19@
    OLDCHECKPOINTZ = 18@
    DRIVINGSTYLE = 17@
end
    // ~~~~~~~~~~~End of Script Initial Setup~~~~~~~~~~~

:initialization
    wait 0
        // ~~~~~~~~~~~Activation Stage~~~~~~~~~~~
    if and
        0ADC: test_cheat "PLEASEDRIVE"
        00DF: actor $PLAYER_ACTOR driving
    004D: jump_if_false @initialization
    03C0: MYVEHICLE = actor $PLAYER_ACTOR car
    046C: 4@ = car MYVEHICLE driver
    if 07D6: 4@ == $PLAYER_ACTOR
    004D: jump_if_false @initialization
    /* if 0AB1: @GetCheckPointPositions 1 _Mode 4 _StoreXYZ CHECKPOINTX CHECKPOINTY CHECKPOINTZ _StoreXYRadius CHECKPOINTRADIUS
    then
    else
        0ACD: show_text_highpriority "~r~No CheckPoints Found!~n~Try Again Later." time 2000
        0002: jump @initialization
    end */
        // ~~~~~~~~~~~End of Activation Stage~~~~~~~~~~~

        // ~~~~~~~~~~~Car Initialization Stage~~~~~~~~~~~
    DRIVINGSTYLE = 0 // used for land vehicles
    03CC: enable_car MYVEHICLE stuck_check_distance_to 2.0 time_to 500
    00AE: set_car MYVEHICLE traffic_behaviour_to 2 // avoid obstacles + ignore traffic lights
    // 0423: set_car MYVEHICLE improved_handling_to 5.0
    00AD: set_car MYVEHICLE AI_max_speed_to 999999.0 // the AI will use its maximum allowable speed
        // ~~~~~~~~~~~End of Car Initialization Stage~~~~~~~~~~~

    0ACD: show_text_highpriority "~y~AJOM's Basic CheckPoint Driver:~g~ENABLED" time 2000
:doautodriving
    wait 0
        // ~~~~~~~~~~~Possible Deactivation Stage~~~~~~~~~~~
    if or
        0ADC: test_cheat "PLEASEDRIVE"
        80DF: not actor $PLAYER_ACTOR driving
        856E: not car MYVEHICLE defined
    then
        :disableutodriving
        if 056E: car MYVEHICLE defined
        then 03A2: set_car MYVEHICLE status_to 0 // Stop the AI and let us drive again
        end
        0ACD: show_text_highpriority "~y~AJOM's Basic CheckPoint Driver:~r~DISABLED" time 2000
        0002: jump @initialization
    end
    if 8185: not car MYVEHICLE health >= 241
    then
        0622: AS_actor $PLAYER_ACTOR bail_car MYVEHICLE
        0ACD: show_text_highpriority "~y~AJOM's Basic CheckPoint Driver:~r~DISABLED Bailed from Burning Car" time 2000
        0002: jump @initialization
    end
    if 0AB1: @GetCheckPointPositions 1 _Mode 4 _StoreXYZ CHECKPOINTX CHECKPOINTY CHECKPOINTZ _StoreXYRadius CHECKPOINTRADIUS
    then
    else :manualdrivingoverride // while there are no checkpoints, temporarily allow us to drive our vehicle
        if DRIVINGSTYLE <> 0
        then DRIVINGSTYLE = 0 // Force the AI to reset the destination
        end
        03A2: set_car MYVEHICLE status_to 0
        0002: jump @doautodriving
    end
        // ~~~~~~~~~~~End of Possible Deactivation Stage~~~~~~~~~~~

        // ~~~~~~~~~~~Manual Driving Override Stage~~~~~~~~~~~ Allows us to drive if Game Control Keys are being pressed
    for 0@ = 0xB73458 to 0xB73466 step 0x4
        0A8D: 1@ = read_memory 0@ size 0x4 virtual_protect 0
        if 1@ == 0
        004D: jump_if_false @manualdrivingoverride
    end
    0A8D: 0@ = read_memory 0xB73474 size 0x4 virtual_protect 0
    0A8D: 1@ = read_memory 0xB73478 size 0x4 virtual_protect 0
    if and
        0@ == 0
        1@ == 0
    004D: jump_if_false @manualdrivingoverride
    if 04AB: actor $PLAYER_ACTOR driving_plane
    then
        0A8D: 0@ = read_memory 0xB7347E size 0x2 virtual_protect 0
        if 0@ <> 0
        then
            wait 500 // submission delay before activation of autodriving once again
            0002: jump @manualdrivingoverride
        end
    end
        // ~~~~~~~~~~~End of Manual Driving Override Stage~~~~~~~~~~~

        // ~~~~~~~~~~~Near CheckPoint Detection Stage~~~~~~~~~~~
    00AA: store_car MYVEHICLE position_to MYPOSITIONX MYPOSITIONY MYPOSITIONZ
    0509: 4@ = distance_between_XY CHECKPOINTX CHECKPOINTY and_XY MYPOSITIONX MYPOSITIONY
    if 0035: CHECKPOINTRADIUS >= 4@ // if we are near to the checkpoint
    then
        if 0AB1: @GetCheckPointPositions 1 _Mode 2 _StoreXYZ 4@ 5@ 6@ _StoreXYRadius 7@ // try using next checkpoint
        then
            if or
                4@ <> 0.0
                5@ <> 0.0
                6@ <> 0.0
            then // use Next CheckPoint Position
                0087: CHECKPOINTX = 4@
                0087: CHECKPOINTY = 5@
                0087: CHECKPOINTZ = 6@
                0087: CHECKPOINTRADIUS = 7@
            end
        end
    end
        // ~~~~~~~~~~~End of Near CheckPoint Detection Stage~~~~~~~~~~~

        // ~~~~~~~~~~~CheckPoint Position Improver Stage~~~~~~~~~~~
    0AB1: @GetPointToPointTrueNorthAngles 6 _FromXYZ MYPOSITIONX MYPOSITIONY MYPOSITIONZ _ToXYZ CHECKPOINTX CHECKPOINTY CHECKPOINTZ _StoreAngleX 5@ _StoreAngleZ 6@
    02E3: 7@ = car MYVEHICLE speed
    if 0025: CHECKPOINTRADIUS > 7@ // speed is slower against the checkpoint radius
    then 0087: 7@ = CHECKPOINTRADIUS // use the radius as excess distance
    end
    0AB1: @get3DXYZInFrontOfTrueNorth 6 _XYZ CHECKPOINTX CHECKPOINTY CHECKPOINTZ _ZAngle 6@ _XAngle 5@  _Distance 7@ _ReturnXYZ IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ
        // ~~~~~~~~~~~End of CheckPoint Position Improver Stage~~~~~~~~~~~

        // ~~~~~~~~~~~AI Decision Stage~~~~~~~~~~~
    if 04A7: actor $PLAYER_ACTOR driving_boat
    then 02D3: boat MYVEHICLE sail_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ
    else
        if 04A9: actor $PLAYER_ACTOR driving_heli
        then 0743: heli MYVEHICLE fly_then_land_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ altitude 60.0 to 120.0
        else
            if 04AB: actor $PLAYER_ACTOR driving_plane
            then 04D2: set_plane MYVEHICLE fly_autopilot_around_point IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ altitude_between 60.0 and 120.0
            else
                    /* For Tracing the Route, REQUIRES SAMPFUNCS
                0B55: convert_3D_coords MYPOSITIONX MYPOSITIONY MYPOSITIONZ to_screen 0@ 1@
                0B55: convert_3D_coords IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ to_screen 2@ 3@
                0B68: render draw_line_point1 0@ 1@ point2 2@ 3@ width 1 color 0xFF00FF00
                    */
                if or // if we have a new checkpoint
                    8045: OLDCHECKPOINTX <> CHECKPOINTX
                    8045: OLDCHECKPOINTY <> CHECKPOINTY
                    8045: OLDCHECKPOINTZ <> CHECKPOINTZ
                then
                    0087: OLDCHECKPOINTX = CHECKPOINTX
                    0087: OLDCHECKPOINTY = CHECKPOINTY
                    0087: OLDCHECKPOINTZ = CHECKPOINTZ
                    DRIVINGSTYLE = 0 // Force the AI to reset the destination
                end
                00AA: store_car MYVEHICLE position_to 4@ 5@ 6@
                02E3: 7@ = car MYVEHICLE speed
                if and
                    83CE: not car MYVEHICLE stuck
                    7@ > 1.0
                    06BD: no_obstacles_between IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ and 4@ 5@ 6@ solid 1 car 0 actor 0 object 1 particle 0
                    // 8AE3: 7@ = not random_object_near_point 4@ 5@ 6@ in_radius 10.0 find_next 0
                then // do an obstacle free driving
                    if DRIVINGSTYLE <> 1 // avoids resetting the task variables of AI decision making
                    then
                        DRIVINGSTYLE = 1
                        00AF: set_car MYVEHICLE driver_behaviour_to 8 // ignore road-paths
                        04E0: car MYVEHICLE abandon_path_radius 999999 // always drive in straight line
                        // 00A7: car MYVEHICLE drive_basic_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ
                        02C2: car MYVEHICLE drive_accurate_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ
                    end
                else // do an obstacle smart driving
                    if DRIVINGSTYLE <> 2 // avoids resetting the task variables of AI decision making
                    then
                        DRIVINGSTYLE = 2
                        00AF: set_car MYVEHICLE driver_behaviour_to 1 // follow road, drive back if way is blocked
                        04E0: car MYVEHICLE abandon_path_radius 0 // never-ever drive straight
                        0704: car MYVEHICLE racedrive_to IMPROVEDCHECKPOINTX IMPROVEDCHECKPOINTY IMPROVEDCHECKPOINTZ // use racing AI
                    end
                end
            end
        end
    end
        // ~~~~~~~~~~~End of AI Decision Stage~~~~~~~~~~~
0002: jump @doautodriving

// ~~~~~~~~~~~Functions~~~~~~~~~~~

:GetPointToPointTrueNorthAngles // 0AB1: @GetPointToPointTrueNorthAngles 6 _FromXYZ 0@ 1@ 2@ _ToXYZ 3@ 4@ 5@ _StoreAngleX 31@ _StoreAngleZ 30@
    // Snippet by AJOM
    // ~~~~~~~~~~~get z-angle towards the target
0087: 30@ = 4@ // Y2
0063: 30@ -= 1@  // Y1
0087: 31@ = 3@ // X2
0063: 31@ -= 0@  // X1
0AA5: _atan2 | 0x4207C0 2 2 | _X 31@ _Y 30@
0AE9: pop_float 30@ // store result from above operation
30@ *= 57.295779817106167876798171061675 // radians to degrees
30@ -= 90.0 // TrueNorth's z-angle lags 90 degrees
    //
    // ~~~~~~~~~~~get x-angle towards the target
0087: 31@ = 5@ // Z2
0063: 31@ -= 2@  // Z1
0509: 29@ = distance_between_XY 0@ 1@ and_XY 3@ 4@ // adjacent side
0AA5: _atan2 | 0x4207C0 2 2 | _X 29@ _Y 31@
0AE9: pop_float 31@ // store result from above operation
31@ *= 57.295779817106167876798171061675 // radians to degrees
    //
0AB2: cleo_return 2 _fAngleX 31@ _fAngleZ 30@

:get3DXYZInFrontOfTrueNorth // 0AB1: @get3DXYZInFrontOfTrueNorth 6 _XYZ 0@ 1@ 2@ _ZAngle 3@ _XAngle 4@  _Distance 5@ _ReturnXYZ 0@ 1@ 2@
    {
        Snippet By AJOM
        Based on Source: http://danceswithcode.net/engineeringnotes/rotations_in_3d/rotations_in_3d_part2.html
        But Using:
            X0 = _Distance = 5@ , Y0 = 0.0 , Z0 = 0.0
            Yaw = _ZAngle = 3@ , Pitch = _XAngle = 4@ , Roll = 0.0
    }
        // Use Opcode.eXe's Coordinate system
    4@ += 180.0 // WorldXAngle = TrueNorthXAngle + 180.0
    3@ += 270.0 // WorldZAngle = (TrueNorthZAngle + 90.0) + 180.0 // we add another 180.0 degrees because we halfy revolve over the World X angle
        //
  
        // Compute X Offset = Cos(Pitch)*Cos(Yaw)*X0
    02F7: 31@ = cosine 4@ // (float)
    02F7: 30@ = cosine 3@ // (float)
    006B: 31@ *= 30@ // (float)
    006B: 31@ *= 5@ // (float)
        //
        // Compute Y Offset = Cos(Pitch)*Sin(Yaw)*X0
    02F7: 30@ = cosine 4@ // (float)
    02F6: 29@ = sine 3@ // (float)
    006B: 30@ *= 29@ // (float)
    006B: 30@ *= 5@ // (float)
        //
        // Compute Z Offset = -Sin(Pitch)*X0
    02F6: 29@ = sine 4@ // (float)
    006B: 29@ *= 5@ // (float)
    29@ *= -1.0
        //
    005B: 0@ += 31@ // New X
    005B: 1@ += 30@ // New Y
    005B: 2@ += 29@ // New Z
0AB2: ret 3 0@ 1@ 2@

// For SAMP Versions other than 0.3.7 R1, go to this link and replace GetCheckPointPositions Snippet into its respective version:
//
:GetCheckPointPositions
{
    0AB1: @GetCheckPointPositions 1 _Mode 0@ _StoreXYZ 19@ 18@ 17@ _StoreXYRadius 16@
        _Mode = 0 --> Normal Checkpoint
        _Mode = 1 --> Primary/Current Race Checkpoint
        _Mode = 2 --> Secondary/Next Race Checkpoint
        _Mode = 3 --> ANY Checkpoint(Priority Normal CheckPoint)
        _Mode = 4 --> ANY Checkpoint(Priority Current Race CheckPoint)
        _Mode = 5 --> ANY Checkpoint(Priority Next Race CheckPoint)
}
if 0AA2: 31@ = load_dynamic_library "samp.dll"
then
    31@ += 0x2ACA3C
    0A8D: 31@ = read_memory 31@ size 4 virtual_protect 0 // pMiscnfo
    31@ += 12
    0A8D: 30@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointPosX
    31@ += 4
    0A8D: 29@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointPosY
    31@ += 4
    0A8D: 28@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointPosZ
  
    31@ += 4
    0A8D: 15@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointExtentX
    31@ += 4
    0A8D: 13@ = read_memory 31@ size 4 virtual_protect 0 // fCheckpointExtentY
    005B: 15@ += 13@
    15@ /= 2.0

    31@ += 8
    0A8D: 27@ = read_memory 31@ size 4 virtual_protect 0 // bCheckpointsEnabled
    31@ += 8
    0A8D: 26@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointPosX
    31@ += 4
    0A8D: 25@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointPosY
    31@ += 4
    0A8D: 24@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointPosZ
    31@ += 4
    0A8D: 23@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointNextX
    31@ += 4
    0A8D: 22@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointNextY
    31@ += 4
    0A8D: 21@ = read_memory 31@ size 4 virtual_protect 0 // fRaceCheckpointNextZ

    31@ += 4
    0A8D: 14@ = read_memory 31@ size 4 virtual_protect 0 // m_fRaceCheckpointSize

    31@ += 5
    0A8D: 20@ = read_memory 31@ size 4 virtual_protect 0 // bRaceCheckpointsEnabled
    if 0@ == 0 // Normal CheckPoint Only
    then
        :passnormalcheckpoint
        if 27@ == true // Normal CheckPoint Exists Somewhere
        then
            0087: 19@ = 30@
            0087: 18@ = 29@
            0087: 17@ = 28@
            0087: 16@ = 15@
            0485:  return_true
        else 059A:  return_false
        end
    else
        if 0@ == 1 // Current Race CheckPoint Only
        then
            :passcurrentracecheckpoint
            if 20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
            then
                0087: 19@ = 26@
                0087: 18@ = 25@
                0087: 17@ = 24@
                0087: 16@ = 14@
                0485:  return_true
            else 059A:  return_false
            end
        else
            if 0@ == 2 // Next Race CheckPoints Only
            then
                :passnextracecheckpoint
                if 20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
                then
                    0087: 19@ = 23@
                    0087: 18@ = 22@
                    0087: 17@ = 21@
                    0087: 16@ = 14@
                    0485:  return_true
                else 059A:  return_false
                end
            else // Any checkpoints is acceptable
                if or
                    27@ == true // Normal CheckPoint Exists Somewhere
                    20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
                then
                    if 0@ == 5 // priority Next Race CheckPoint
                    then
                        if 20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
                        then 0002: jump @passnextracecheckpoint
                        else 0002: jump @passnormalcheckpoint
                        end
                    else
                        if 0@ == 4 // priority Current Race CheckPoint
                        then
                            if 20@ == true // Primary/Secondary Race CheckPoint Exists Somewhere
                            then 0002: jump @passcurrentracecheckpoint
                            else 0002: jump @passnormalcheckpoint
                            end
                        else
                            if 27@ == true // Normal CheckPoint Exists Somewhere
                            then 0002: jump @passnormalcheckpoint
                            else 0002: jump @passcurrentracecheckpoint
                            end
                        end
                    end
                else 059A:  return_false
                end
            end
        end
    end
else 059A:  return_false
end
0AB2: cleo_return 4 _XYZ 19@ 18@ 17@ _Radius 16@

// ~~~~~~~~~~~End of Functions~~~~~~~~~~~
can you make it a .cs file? thank you very much
 
Top