174 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local nearTV = false
 | 
						|
local menuOpen = false
 | 
						|
 | 
						|
-- TV-Suche
 | 
						|
CreateThread(function()
 | 
						|
    while true do
 | 
						|
        local playerPed = PlayerPedId()
 | 
						|
        local playerCoords = GetEntityCoords(playerPed)
 | 
						|
        nearTV = false
 | 
						|
 | 
						|
        for _, model in pairs(Config.TVModels) do
 | 
						|
            local tv = GetClosestObjectOfType(playerCoords, 1.5, model, false, false, false)
 | 
						|
            if tv ~= 0 then
 | 
						|
                nearTV = true
 | 
						|
                break
 | 
						|
            end
 | 
						|
        end
 | 
						|
 | 
						|
        if nearTV then
 | 
						|
            ShowHelpNotification(Config.Texts.PressE)
 | 
						|
            if IsControlJustReleased(0, 38) then -- "E" drücken
 | 
						|
                OpenMainMenu()
 | 
						|
            end
 | 
						|
        end
 | 
						|
 | 
						|
        Wait(0)
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
-- Hauptmenü öffnen
 | 
						|
function OpenMainMenu()
 | 
						|
    if menuOpen then return end
 | 
						|
    menuOpen = true
 | 
						|
 | 
						|
    local selected = NativeMenu(Config.MainMenu, Config.Texts.MainMenuTitle)
 | 
						|
 | 
						|
    if selected == "solo" then
 | 
						|
        OpenGameSelect("solo")
 | 
						|
    elseif selected == "duel" then
 | 
						|
        OpenGameSelect("duel")
 | 
						|
    end
 | 
						|
 | 
						|
    menuOpen = false
 | 
						|
end
 | 
						|
 | 
						|
-- Spielauswahl Menü
 | 
						|
function OpenGameSelect(mode)
 | 
						|
    local selectedGame = NativeMenu(Config.MiniGames, Config.Texts.SelectGameTitle)
 | 
						|
 | 
						|
    if selectedGame then
 | 
						|
        if mode == "solo" then
 | 
						|
            StartGame(selectedGame, nil)
 | 
						|
        elseif mode == "duel" then
 | 
						|
            SelectPlayer(function(target)
 | 
						|
                StartGame(selectedGame, target)
 | 
						|
            end)
 | 
						|
        end
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
-- Spieler auswählen
 | 
						|
function SelectPlayer(callback)
 | 
						|
    local players = GetPlayers()
 | 
						|
    local playerMenu = {}
 | 
						|
 | 
						|
    for _, player in pairs(players) do
 | 
						|
        if player ~= PlayerId() then
 | 
						|
            local name = GetPlayerName(player)
 | 
						|
            table.insert(playerMenu, {label = name, id = GetPlayerServerId(player)})
 | 
						|
        end
 | 
						|
    end
 | 
						|
 | 
						|
    if #playerMenu == 0 then
 | 
						|
        ShowNotification(Config.Texts.NoPlayers)
 | 
						|
        return
 | 
						|
    end
 | 
						|
 | 
						|
    local selected = NativeMenu(playerMenu, Config.Texts.InviteTitle)
 | 
						|
 | 
						|
    if selected then
 | 
						|
        callback(selected)
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
-- Spiel starten
 | 
						|
function StartGame(gameType, opponent)
 | 
						|
    if opponent then
 | 
						|
        ShowNotification(Config.Texts.InviteSent)
 | 
						|
        -- Hier Server-Event für Duell senden
 | 
						|
    else
 | 
						|
        ShowNotification(Config.Texts.GameStarted .. gameType)
 | 
						|
        -- Hier Solo-Game starten
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
-- Native Menü-Generator
 | 
						|
function NativeMenu(options, title)
 | 
						|
    local selected = 1
 | 
						|
    local active = true
 | 
						|
 | 
						|
    while active do
 | 
						|
        Wait(0)
 | 
						|
        DrawRect(0.5, 0.2, 0.3, 0.05, 0, 0, 0, 180)
 | 
						|
        DrawText2D(title, 0.5, 0.18, 0.8)
 | 
						|
 | 
						|
        for i = 1, #options do
 | 
						|
            local y = 0.22 + (i * 0.03)
 | 
						|
            if i == selected then
 | 
						|
                DrawRect(0.5, y, 0.3, 0.03, 255, 255, 255, 100)
 | 
						|
            end
 | 
						|
            DrawText2D(options[i].label, 0.5, y, 0.5)
 | 
						|
        end
 | 
						|
 | 
						|
        if IsControlJustPressed(0, 172) then -- Pfeil Hoch
 | 
						|
            selected = selected - 1
 | 
						|
            if selected < 1 then selected = #options end
 | 
						|
        elseif IsControlJustPressed(0, 173) then -- Pfeil Runter
 | 
						|
            selected = selected + 1
 | 
						|
            if selected > #options then selected = 1 end
 | 
						|
        elseif IsControlJustPressed(0, 18) then -- Enter
 | 
						|
            local option = options[selected]
 | 
						|
            if option.action then
 | 
						|
                return option.action
 | 
						|
            elseif option.game then
 | 
						|
                return option.game
 | 
						|
            elseif option.id then
 | 
						|
                return option.id
 | 
						|
            end
 | 
						|
            active = false
 | 
						|
        elseif IsControlJustPressed(0, 202) then -- Backspace
 | 
						|
            active = false
 | 
						|
        end
 | 
						|
    end
 | 
						|
 | 
						|
    return nil
 | 
						|
end
 | 
						|
 | 
						|
-- Text zeichnen
 | 
						|
function DrawText2D(text, x, y, scale)
 | 
						|
    SetTextFont(4)
 | 
						|
    SetTextProportional(0)
 | 
						|
    SetTextScale(scale, scale)
 | 
						|
    SetTextColour(255, 255, 255, 255)
 | 
						|
    SetTextCentre(1)
 | 
						|
    BeginTextCommandDisplayText("STRING")
 | 
						|
    AddTextComponentSubstringPlayerName(text)
 | 
						|
    EndTextCommandDisplayText(x, y)
 | 
						|
end
 | 
						|
 | 
						|
-- Spieler abrufen
 | 
						|
function GetPlayers()
 | 
						|
    local players = {}
 | 
						|
    for i = 0, 255 do
 | 
						|
        if NetworkIsPlayerActive(i) then
 | 
						|
            table.insert(players, i)
 | 
						|
        end
 | 
						|
    end
 | 
						|
    return players
 | 
						|
end
 | 
						|
 | 
						|
-- Notification
 | 
						|
function ShowNotification(msg)
 | 
						|
    BeginTextCommandThefeedPost("STRING")
 | 
						|
    AddTextComponentSubstringPlayerName(msg)
 | 
						|
    EndTextCommandThefeedPostMessagetext("CHAR_MULTIPLAYER", "CHAR_MULTIPLAYER", true, 1, "TV Game", msg)
 | 
						|
    EndTextCommandThefeedPostTicker(false, false)
 | 
						|
end
 | 
						|
 | 
						|
-- Hilfe Notification
 | 
						|
function ShowHelpNotification(msg)
 | 
						|
    BeginTextCommandDisplayHelp("STRING")
 | 
						|
    AddTextComponentSubstringPlayerName(msg)
 | 
						|
    EndTextCommandDisplayHelp(0, 0, 1, -1)
 | 
						|
end
 |