View difference between Paste ID: gVH8B7fJ and SnxZtRcj
SHOW: | | - or go back to the newest paste.
1
using GTA;
2
using GTA.Math;
3
using GTA.Native;
4
using System;
5
using System.Collections.Generic;
6
using System.Windows.Forms;
7
8
9
10
public class RobPeople : Script
11
{
12
    List<Ped> PeopleRobbed = new List<Ped>();
13
14
15
    int RobMeter;
16
    Ped RobbbedPed;
17
    bool RoberyInProgress=false;
18
    public RobPeople()
19
    {
20
        Tick += OnTick;
21
        KeyDown += OnKeyDown;
22
        KeyUp += OnKeyUp;
23
    }
24
25
    bool IsCop(Ped ped)
26
    {
27
        Vector3 pedpos = ped.Position;
28
        float radius = 0.5f;
29
        if (ped.IsSittingInVehicle() && CanWeUse(ped.CurrentVehicle)) radius = (ped.CurrentVehicle.Model.GetDimensions().X) / 2;
30
        return Function.Call<bool>(Hash.IS_COP_PED_IN_AREA_3D, pedpos.X + radius, pedpos.Y + radius, pedpos.Z + radius, pedpos.X - radius, pedpos.Y - radius, ped.Position.Z - radius);
31
    }
32
33
    void OnTick(object sender, EventArgs e)
34
    {
35
36
        if (RoberyInProgress)
37
        {
38
            if (CanWeUse(RobbbedPed))
39
            {
40
                if (RobbbedPed.IsDead || !RobbbedPed.IsInRangeOf(Game.Player.Character.Position, 50f))
41
                {
42
                    RoberyInProgress = false;
43
                    RobMeter = 0;
44
                }
45
            }
46
            else
47
            {
48
                RoberyInProgress = false;
49
                RobMeter = 0;
50
            }
51
        }
52
53
54
        Entity victim = Game.Player.GetTargetedEntity();
55
        if (CanWeUse(victim) && Function.Call<bool>(Hash.IS_ENTITY_A_PED, victim))
56
        {
57
            Ped ped = victim as Ped;
58
59
            if (ped.IsInRangeOf(Game.Player.Character.Position,20f) && ped.Model != PedHash.ShopKeep01 && !IsPedInList(ped, PeopleRobbed) && (RoberyInProgress || IsThisEntityAheadThatEntity(Game.Player.Character,ped))
60
                && ped.IsOnFoot && !IsCop(ped) && !ped.IsRagdoll && ped.IsAlive && !ped.IsInjured && ped.Weapons.Current.Hash == WeaponHash.Unarmed)
61
            {                
62
                if ((!CanWeUse(RobbbedPed) || RobbbedPed.Handle != ped.Handle) && !RoberyInProgress)
63
                {
64
                    RoberyInProgress = true;
65
                    RobbbedPed = ped;
66
                    ped.AlwaysKeepTask = true;
67
                    ped.Task.ClearAll();
68
                    TaskSequence RaceSequence = new TaskSequence();
69
                    ped.Task.TurnTo(Game.Player.Character,300);
70
                    ped.Task.HandsUp(10000);
71
                    RaceSequence.Close();
72
                    ped.Task.PerformSequence(RaceSequence);
73
                    RaceSequence.Dispose();
74
                    ped.BlockPermanentEvents = true;
75
                    Function.Call(GTA.Native.Hash._PLAY_AMBIENT_SPEECH1, Game.Player.Character.Handle, "Generic_Insult_High", "Speech_Params_Force");
76
                }
77
                else
78
                {
79
                    Function.Call(Hash.UPDATE_TASK_HANDS_UP_DURATION, ped, 5000);
80
                    RobMeter++;
81
                }
82
83
                if (RobMeter > 100)
84
                {
85
                    RobMeter = 0;
86
                    PeopleRobbed.Add(ped);
87
                    Function.Call(GTA.Native.Hash._PLAY_AMBIENT_SPEECH1, ped.Handle, "GENERIC_FRIGHTENED_MED", "SPEECH_PARAMS_FORCE_SHOUTED_CRITICAL");
88
                    ped.Task.FleeFrom(Game.Player.Character,-1);
89
                    int money = ped.Money;
90
                    if (money < 10) money = RandomInt(50, 100);
91
                    World.CreateAmbientPickup(PickupType.MoneyCase, ped.Position + ped.ForwardVector * 0.5f, "prop_ld_wallet_01", money);
92
                    RoberyInProgress = false;
93
                }
94
            }
95
        }
96
        if (PeopleRobbed.Count > 20) PeopleRobbed.RemoveAt(0);
97
    }
98
99
100
    void OnKeyDown(object sender, KeyEventArgs e)
101
    {
102
103
    }
104
    void OnKeyUp(object sender, KeyEventArgs e)
105
    {
106
107
    }
108
109
    bool IsCopNearby(Vector3 pos, float radius)
110
    {
111
        return Function.Call<bool>(Hash.IS_COP_PED_IN_AREA_3D, pos.X + radius, pos.Y + radius, pos.Z + radius, pos.X - radius, pos.Y - radius, pos.Z - radius);
112
    }
113
114
    int RandomInt(int min, int max)
115
    {
116
        max++;
117
        return Function.Call<int>(GTA.Native.Hash.GET_RANDOM_INT_IN_RANGE, min, max);
118
    }
119
    bool IsThisEntityAheadThatEntity(Entity ent1, Entity ent2)
120
    {
121
        Vector3 pos = ent1.Position;
122
123
        return Function.Call<Vector3>(Hash.GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS, ent2, pos.X, pos.Y, pos.Z).Y > 0f;
124
    }
125
126
    void DisplayHelpTextThisFrame(string text)
127
    {
128
        Function.Call(Hash._SET_TEXT_COMPONENT_FORMAT, "STRING");
129
        Function.Call(Hash._ADD_TEXT_COMPONENT_STRING, text);
130
        Function.Call(Hash._DISPLAY_HELP_TEXT_FROM_STRING_LABEL, 0, 0, 0, -1);
131
    }
132
133
134
    bool CanWeUse(Entity entity)
135
    {
136
        return entity != null && entity.Exists();
137
    }
138
    bool IsPedInList(Ped ped, List<Ped> list)
139
    {
140
        foreach (Ped man in list)
141
        {
142
            if (man.Handle == ped.Handle)
143
            {
144
                return true;
145
            }
146
        }
147
        return false;
148
    }
149
150
}