-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmolotov_4258994.lua
79 lines (60 loc) · 3.09 KB
/
molotov_4258994.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
local ffi = require "ffi"
local vmt_hook = require("neverlose/vmt_hook")
local function has_value(tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
end
end
return false
end
local original_InitNewParticlesScalar
local fireMaterialNames = {
"particle\\fire_burning_character\\fire_env_fire.vmt",
"particle\\fire_burning_character\\fire_env_fire_depthblend.vmt",
"particle\\fire_burning_character\\fire_burning_character_depthblend.vmt",
"particle\\fire_burning_character\\fire_burning_character.vmt",
"particle\\fire_burning_character\\fire_burning_character_nodepth.vmt",
"particle\\particle_flares\\particle_flare_001.vmt",
"particle\\particle_flares\\particle_flare_004.vmt",
"particle\\particle_flares\\particle_flare_004b_mod_ob.vmt",
"particle\\particle_flares\\particle_flare_004b_mod_z.vmt",
"particle\\fire_explosion_1\\fire_explosion_1_bright.vmt",
"particle\\fire_explosion_1\\fire_explosion_1b.vmt",
"particle\\fire_particle_4\\fire_particle_4.vmt",
"particle\\fire_explosion_1\\fire_explosion_1_oriented.vmt",
}
local Hooked_InitNewParticlesScalar = function(thisptr, particles, start_p, particle_count, attribute_write_mask, context)
original_InitNewParticlesScalar(thisptr, particles, start_p, particle_count, attribute_write_mask, context)
--[[
local particles_address = ffi.cast("uintptr_t", particles)
local normColorMin = ffi.cast("float*", particles_address + 92)
local normColorMax = ffi.cast("float*", particles_address + 92 + 12)
local originalMin_R, originalMin_G, originalMin_B = normColorMin[0], normColorMin[1], normColorMin[2]
local originalMax_R, originalMax_G, originalMax_B = normColorMax[0], normColorMax[1], normColorMax[2]
local particleMaterialName = ffi.string(ffi.cast("char**", (ffi.cast("uintptr_t*", particles_address + 0x48)[0] + 0x40))[0])
if has_value(fireMaterialNames, particleMaterialName) then
normColorMax[0] = 128 / 255
normColorMin[0] = normColorMax[0]
normColorMax[1] = 255 / 255
normColorMin[1] = normColorMax[1]
normColorMax[2] = 0
normColorMin[2] = normColorMax[2]
end
original_InitNewParticlesScalar(thisptr, particles, start_p, particle_count, attribute_write_mask, context)
normColorMin[0] = originalMin_R
normColorMin[1] = originalMin_G
normColorMin[2] = originalMin_B
normColorMax[0] = originalMax_R
normColorMax[1] = originalMax_G
normColorMax[2] = originalMax_B
]]
end
local CInitRandomColorVtableAddress = utils.opcode_scan("client.dll", "C7 85 ? ? ? ? ? ? ? ? 8D 8D ? ? ? ? 0F 11 45 D8")
CInitRandomColorVtableAddress = ffi.cast("void*", (ffi.cast("uintptr_t", CInitRandomColorVtableAddress) + 6))
local CInitRandomColor = vmt_hook.new(CInitRandomColorVtableAddress)
original_InitNewParticlesScalar = CInitRandomColor.hook("void(__fastcall*)(void* thisptr,void* particles, int start_p, int particle_count, int attribute_write_mask, void* context)", Hooked_InitNewParticlesScalar, 29)
local shutdown = function()
CInitRandomColor.unHookAll()
end
events.shutdown:set(shutdown)