1
- local timers = {} -- timers for existing pickups
2
-
3
- local function onDeathPickupHit ( player , matchingDimension )
4
- if matchingDimension then
5
- killTimer ( timers [source ] )
6
- timers [source ] = nil
7
- removeEventHandler ( " onPickupHit" , source , onDeathPickupHit )
8
- local weapid = getPickupWeapon ( source )
9
- local weapammo = getPickupAmmo ( source )
10
- destroyElement ( source )
11
- giveWeapon ( player , weapid , weapammo , false )
1
+ local pickupTimers = {}
2
+ local expireTime = get (" timeout" )
3
+ local onlyCurrentWeapon = get (" only_current" )
4
+ local dropRadius = get (" radius" )
5
+
6
+ local function destroyDeathPickup (pickupElement )
7
+ if isElement (pickupElement ) then
8
+ destroyElement (pickupElement )
9
+ end
10
+ end
11
+
12
+ local function dropAllWeapons (posX , posY , posZ , droppedWeapons )
13
+ local weaponsCount = # droppedWeapons
14
+
15
+ for wID = 1 , weaponsCount do
16
+ local weaponData = droppedWeapons [wID ]
17
+ local weaponID = weaponData [1 ]
18
+ local weaponAmmo = weaponData [2 ]
19
+ local pickupX = posX + dropRadius * math.cos ((wID - 1 ) * 2 * math.pi / weaponsCount )
20
+ local pickupY = posY + dropRadius * math.sin ((wID - 1 ) * 2 * math.pi / weaponsCount )
21
+ local pickupElement = createPickup (pickupX , pickupY , posZ , 2 , weaponID , expireTime , weaponAmmo )
22
+
23
+ pickupTimers [pickupElement ] = setTimer (destroyDeathPickup , expireTime , 1 , pickupElement )
12
24
end
13
25
end
14
26
15
- local function destroyDeathPickup ( pickup )
16
- timers [ pickup ] = nil
17
- removeEventHandler ( " onPickupHit " , pickup , onDeathPickupHit )
18
- destroyElement ( pickup )
27
+ function onDeathPickupHit ( playerElement )
28
+ cancelEvent ()
29
+ giveWeapon ( playerElement , getPickupWeapon ( source ), getPickupAmmo ( source ), false )
30
+ destroyDeathPickup ( source )
19
31
end
32
+ addEventHandler (" onPickupHit" , resourceRoot , onDeathPickupHit )
33
+
34
+ function onPlayerWasted ()
35
+ local posX , posY , posZ = getElementPosition (source )
36
+
37
+ if onlyCurrentWeapon then
38
+ local playerWeapon = getPedWeapon (source )
39
+ local validWeapon = playerWeapon and playerWeapon ~= 0
20
40
21
- addEventHandler ( " onPlayerWasted" , getRootElement (),
22
- function ( source_ammo , killer , killer_weapon , bodypart )
23
- local pX , pY , pZ = getElementPosition ( source )
24
- local timeout = get (" timeout" )
25
-
26
- if get (" only_current" ) then
27
- local source_weapon = getPedWeapon ( source )
28
- if ( source_weapon and source_weapon ~= 0 and source_ammo ) then
29
- local pickup = createPickup ( pX , pY , pZ , 2 , source_weapon , timeout , source_ammo )
30
- addEventHandler ( " onPickupHit" , pickup , onDeathPickupHit )
31
- timers [pickup ] = setTimer ( destroyDeathPickup , timeout , 1 , pickup )
41
+ if validWeapon then
42
+ local totalAmmo = getPedTotalAmmo (source )
43
+ local pickupElement = createPickup (posX , posY , posZ , 2 , playerWeapon , expireTime , totalAmmo )
44
+
45
+ pickupTimers [pickupElement ] = setTimer (destroyDeathPickup , expireTime , 1 , pickupElement )
46
+ end
47
+ else
48
+ local droppedWeapons = {}
49
+
50
+ for weaponSlot = 0 , 12 do
51
+ local playerWeapon = getPedWeapon (source , weaponSlot )
52
+ local validWeapon = playerWeapon ~= 0
53
+
54
+ if validWeapon then
55
+ local ammoInSlot = getPedTotalAmmo (source , weaponSlot )
56
+
57
+ droppedWeapons [# droppedWeapons + 1 ] = {playerWeapon , ammoInSlot }
32
58
end
33
- else
34
- local droppedWeapons = {}
35
- for slot = 0 , 12 do
36
- local ammo = getPedTotalAmmo (source , slot )
37
- if (getPedWeapon (source , slot ) ~= 0 ) then
38
- local weapon = getPedWeapon (source , slot )
39
- local ammo = getPedTotalAmmo (source , slot )
40
- table.insert (droppedWeapons , {weapon , ammo })
41
- end
59
+ end
60
+
61
+ dropAllWeapons (posX , posY , posZ , droppedWeapons )
62
+ end
63
+ end
64
+ addEventHandler (" onPlayerWasted" , root , onPlayerWasted )
65
+
66
+ function onElementDestroyPickup ()
67
+ local validElement = isElement (source )
68
+
69
+ if validElement then
70
+ local pickupType = getElementType (source ) == " pickup"
71
+
72
+ if pickupType then
73
+ local pickupTimer = pickupTimers [source ]
74
+
75
+ if pickupTimer then
76
+ killTimer (pickupTimer )
77
+ pickupTimers [source ] = nil
42
78
end
43
- DropAllWeapons (droppedWeapons )
44
79
end
45
80
end
46
- )
47
-
48
- function DropAllWeapons ( droppedWeapons )
49
- local radius = get (" radius" )
50
- local numberDropped = # droppedWeapons
51
- for i , t in ipairs (droppedWeapons ) do
52
- local pX , pY , pZ = getElementPosition ( source )
53
- local x = pX + radius * math.cos ((i - 1 ) * 2 * math.pi / numberDropped )
54
- local y = pY + radius * math.sin ((i - 1 ) * 2 * math.pi / numberDropped )
55
- local timeout = get (" timeout" )
56
- local pickup = createPickup (x , y , pZ , 2 , t [1 ], timeout , t [2 ])
57
- addEventHandler ( " onPickupHit" , pickup , onDeathPickupHit )
58
- timers [pickup ] = setTimer ( destroyDeathPickup , timeout , 1 , pickup )
81
+ end
82
+ addEventHandler (" onElementDestroy" , resourceRoot , onElementDestroyPickup )
83
+
84
+ function onSettingChange (settingName , _ , newValue )
85
+ local expireSetting = settingName == " *deathpickups.timeout"
86
+
87
+ if expireSetting then
88
+ expireTime = fromJSON (newValue )
89
+ end
90
+
91
+ local weaponSetting = settingName == " *deathpickups.only_current"
92
+
93
+ if weaponSetting then
94
+ onlyCurrentWeapon = fromJSON (newValue )
95
+ end
96
+
97
+ local radiusSetting = settingName == " *deathpickups.radius"
98
+
99
+ if radiusSetting then
100
+ dropRadius = fromJSON (newValue )
59
101
end
60
102
end
103
+ addEventHandler (" onSettingChange" , resourceRoot , onSettingChange )
0 commit comments