Загрузить файлы в «/»
This commit is contained in:
262
RAMPAGE.lua
Normal file
262
RAMPAGE.lua
Normal file
@@ -0,0 +1,262 @@
|
||||
--[[
|
||||
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||
distribute this software, either in source code form or as a compiled
|
||||
binary, for any purpose, commercial or non-commercial, and by any
|
||||
means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors
|
||||
of this software dedicate any and all copyright interest in the
|
||||
software to the public domain. We make this dedication for the benefit
|
||||
of the public at large and to the detriment of our heirs and
|
||||
successors. We intend this dedication to be an overt act of
|
||||
relinquishment in perpetuity of all present and future rights to this
|
||||
software under copyright law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <https://unlicense.org>
|
||||
|
||||
]]
|
||||
|
||||
script_name("RAMPAGE")
|
||||
script_author("treywisp, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> chapo <20><> mimgui <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||||
|
||||
local sampev = require("samp.events")
|
||||
local imgui = require("mimgui")
|
||||
|
||||
local rampage_text = {
|
||||
"1 YEbaH XyEB", "2 cblHa wJllOxu", "3 WaJlaBbl", "4 nugopaca", "5 XYECOCOB", "6 Ye6uW gETgOMA",
|
||||
"7 CblHoBeu WJllOX", "Wicked Sick", "Godlike", "Hitman", "GODNESS KILL", "Most Respected",
|
||||
"Unreal Shit", "Bruh Moment", "You madz?", "Stop Please", "Are you God?",
|
||||
"Extreme Kill", "wJllOxa c AuMoM Tbl"
|
||||
}
|
||||
|
||||
local func_vars = {
|
||||
screen_width = getScreenResolution(),
|
||||
frame_path = getWorkingDirectory() .. "\\RAMPAGE\\img",
|
||||
sound = getWorkingDirectory().."\\RAMPAGE\\sounds\\sound.mp3",
|
||||
|
||||
gif = nil,
|
||||
font = nil,
|
||||
|
||||
first_start = false,
|
||||
current_kills = 0,
|
||||
}
|
||||
|
||||
local fade = {
|
||||
start_timer = 0,
|
||||
alpha = 1.0,
|
||||
}
|
||||
|
||||
local imgui_states = {
|
||||
window_state = imgui.new.bool(),
|
||||
frame_time = imgui.new.int(50),
|
||||
}
|
||||
|
||||
local killed_players = {}
|
||||
local recent_textdraws = {}
|
||||
|
||||
local function updateFade()
|
||||
local current_time = os.clock()
|
||||
local time_since_event = current_time - fade.start_timer
|
||||
|
||||
if time_since_event < 1.5 then
|
||||
return
|
||||
|
||||
elseif time_since_event < 2.0 then
|
||||
fade.alpha = 1.0 - (time_since_event - 1.5) / 0.5
|
||||
|
||||
else
|
||||
imgui_states.window_state[0] = false
|
||||
end
|
||||
end
|
||||
|
||||
local function notify(text)
|
||||
sampAddChatMessage("[RAMPAGE] {FFFFFF}"..text, 0xFF0000)
|
||||
end
|
||||
|
||||
local function playSound()
|
||||
local audio = loadAudioStream(func_vars.sound)
|
||||
setAudioStreamState(audio, 1)
|
||||
setAudioStreamVolume(audio, math.floor(4))
|
||||
end
|
||||
|
||||
local function rampage()
|
||||
func_vars.current_kills = math.min(func_vars.current_kills + 1, #rampage_text)
|
||||
fade.start_timer = os.clock()
|
||||
fade.alpha = 1
|
||||
|
||||
imgui_states.window_state[0] = true
|
||||
playSound()
|
||||
end
|
||||
|
||||
function imgui.LoadFrames(path)
|
||||
local function getFilesInPath(path, file_type)
|
||||
local files, search_handle, file = {}, findFirstFile(path.."\\"..file_type)
|
||||
table.insert(files, file)
|
||||
while file do file = findNextFile(search_handle) table.insert(files, file) end
|
||||
return files
|
||||
end
|
||||
local files = getFilesInPath(path, '*.png')
|
||||
local t = { current = 1, max = #files, last_frame_time = os.clock() }
|
||||
table.sort(files, function(a, b)
|
||||
local a_num, b_num = tonumber(a:match('(%d+)%.png')), tonumber(b:match('(%d+)%.png'))
|
||||
return a_num < b_num
|
||||
end)
|
||||
for index, file in ipairs(files) do
|
||||
t[index] = imgui.CreateTextureFromFile(path..'\\'..file)
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
function imgui.DrawFrames(images_table, size, frame_time)
|
||||
if images_table then
|
||||
imgui.Image(images_table[images_table.current], size, nil, nil, imgui.ImVec4(1, 1, 1, fade.alpha))
|
||||
if images_table.last_frame_time + ((frame_time or 50)/1000) - os.clock() <= 0 then
|
||||
images_table.last_frame_time = os.clock()
|
||||
if images_table.current ~= nil then
|
||||
images_table.current = images_table[images_table.current + 1] == nil and 1 or images_table.current + 1
|
||||
else
|
||||
images_table.current = 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function imgui.TextWithShadow(text)
|
||||
imgui.PushStyleColor(imgui.Col.Text, imgui.ImVec4(0, 0, 0, fade.alpha))
|
||||
local s_shadowSize = {v = 3}
|
||||
local pos = imgui.GetCursorPos()
|
||||
imgui.SetCursorPos(imgui.ImVec2(pos.x - s_shadowSize.v, pos.y)) imgui.Text(text)
|
||||
imgui.SetCursorPos(imgui.ImVec2(pos.x + s_shadowSize.v, pos.y)) imgui.Text(text)
|
||||
imgui.SetCursorPos(imgui.ImVec2(pos.x, pos.y + s_shadowSize.v)) imgui.Text(text)
|
||||
imgui.SetCursorPos(imgui.ImVec2(pos.x, pos.y - s_shadowSize.v)) imgui.Text(text)
|
||||
imgui.PopStyleColor()
|
||||
imgui.SetCursorPos(pos)
|
||||
imgui.TextColored(imgui.ImVec4(1, 1, 1, fade.alpha), text)
|
||||
end
|
||||
|
||||
function imgui.CenterText(text)
|
||||
local width = imgui.GetWindowWidth()
|
||||
local calc = imgui.CalcTextSize(text)
|
||||
imgui.SetCursorPosX(width / 2 - calc.x / 2)
|
||||
imgui.TextWithShadow(text)
|
||||
end
|
||||
|
||||
imgui.OnInitialize(function()
|
||||
imgui.GetIO().IniFilename = nil
|
||||
func_vars.gif = imgui.LoadFrames(func_vars.frame_path)
|
||||
imgui.GetIO().Fonts:AddFontFromFileTTF(getFolderPath(0x14) .. '\\trebucbd.ttf', 14.0, nil, glyph_ranges)
|
||||
func_vars.font = imgui.GetIO().Fonts:AddFontFromFileTTF(getFolderPath(0x14) .. '\\trebucbd.ttf', 34.0, _, glyph_ranges)
|
||||
end)
|
||||
|
||||
imgui.OnFrame(function() return imgui_states.window_state[0] end, function(player)
|
||||
player.HideCursor = true
|
||||
-- cursor fix
|
||||
if not func_vars.first_start then
|
||||
imgui_states.window_state[0] = false
|
||||
func_vars.first_start = true
|
||||
return
|
||||
end
|
||||
|
||||
imgui.SetNextWindowSize(imgui.ImVec2(600, 150), imgui.Cond.FirstUseEver)
|
||||
imgui.SetNextWindowPos(imgui.ImVec2(func_vars.screen_width / 2, 300), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
|
||||
imgui.Begin("RAMPAGE", imgui_states.window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar +
|
||||
imgui.WindowFlags.NoScrollWithMouse + imgui.WindowFlags.NoInputs + imgui.WindowFlags.NoFocusOnAppearing +
|
||||
imgui.WindowFlags.NoTitleBar + imgui.WindowFlags.NoBackground)
|
||||
|
||||
updateFade()
|
||||
|
||||
imgui.SetCursorPosX((imgui.GetWindowWidth() - 100) / 2 - imgui.GetStyle().WindowPadding.x);
|
||||
imgui.DrawFrames(func_vars.gif, imgui.ImVec2(100, 75), imgui_states.frame_time[0])
|
||||
|
||||
imgui.PushFont(func_vars.font)
|
||||
imgui.CenterText(rampage_text[func_vars.current_kills])
|
||||
|
||||
imgui.End()
|
||||
end)
|
||||
|
||||
function main()
|
||||
if not isSampAvailable or not isSampfuncsLoaded() then return end
|
||||
while not isSampAvailable() do wait (100) end
|
||||
|
||||
imgui_states.window_state[0] = true -- cursor fix
|
||||
|
||||
notify("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> \"github.com/treywisp\"")
|
||||
|
||||
while true do wait(0)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function sampev.onSendSpawn()
|
||||
func_vars.current_kills = 0
|
||||
end
|
||||
|
||||
-- srp damage informer
|
||||
function sampev.onShowTextDraw(id, data)
|
||||
if id == 2050 and data.text:find(".- %- .- %- KILL") then
|
||||
local current_time = os.clock()
|
||||
recent_textdraws[data.text] = current_time
|
||||
|
||||
lua_thread.create(function() wait(100)
|
||||
if recent_textdraws[data.text] ~= current_time then
|
||||
return
|
||||
end
|
||||
|
||||
local current_text = sampTextdrawGetString(2050)
|
||||
if current_text and current_text:match(".- %- .- %- KILL") then
|
||||
local nick = current_text:match("([^%s]-) %-")
|
||||
if nick and not killed_players[nick] then
|
||||
killed_players[nick] = true
|
||||
rampage()
|
||||
wait(1500)
|
||||
recent_textdraws[data.text] = nil
|
||||
killed_players[nick] = nil
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
-- kill list
|
||||
function sampev.onPlayerDeathNotification(killer_id, victim_id)
|
||||
if sampIsPlayerConnected(victim_id) then
|
||||
local nick = sampGetPlayerNickname(victim_id)
|
||||
if killer_id == select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)) and not killed_players[nick] then
|
||||
lua_thread.create(function()
|
||||
killed_players[nick] = true
|
||||
rampage() wait(1500)
|
||||
killed_players[nick] = nil
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- standart check
|
||||
function sampev.onSendGiveDamage(id, damage)
|
||||
if sampIsPlayerConnected(id) then
|
||||
local nick = sampGetPlayerNickname(id)
|
||||
if id == 65535 or killed_players[nick] then return end
|
||||
if sampGetPlayerHealth(id) - damage <= 0 then
|
||||
lua_thread.create(function()
|
||||
wait(350)
|
||||
local _, char = sampGetCharHandleBySampPlayerId(id)
|
||||
if sampGetPlayerHealth(id) <= 0 and isCharDead(char) and not killed_players[nick] then
|
||||
killed_players[nick] = true
|
||||
rampage() wait(1500)
|
||||
killed_players[nick] = nil
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user