Jump to content

Spectator Diferent


brad

Recommended Posts

Hello friends and good morning to the great scripters of this forum, Quisiro know how to put my spectator so that when a player sees another player to play you can see what other players are watching thx to my script below

spectators_c.lua

--[[ 
  
*   Multi Theft Auto - Spectators 
  
*   spectators_c.lua 
  
*   Original file by Zango 
  
--]] 
  
local x, y = guiGetScreenSize () 
  
local localPlayer = getLocalPlayer() 
  
local spectatorSettings = { 
count = 7, -- how many player names to show, before showing "and x more" 
charLimit = 19, -- max limit of characters in player name 
xOffset = 200, -- how far to the left this should be 
yOffset = (y / 2) - 10, -- how far down the screen this should be ~ currently it is almost half way down 
alwaysShow = true -- whether to show anything if there aren't any players spectating you 
} 
  
local spectators = {} 
  
addEvent('addSpectator', true) 
addEvent('removeSpectator', true) 
  
addEventHandler('onClientResourceStart', root, 
    function() 
        triggerServerEvent ('addClient', localPlayer) 
    end 
) 
  
addEventHandler('addSpectator', root, 
    function(spectator) 
        table.insert(spectators, spectator) 
    end 
) 
  
addEventHandler('removeSpectator', root, 
    function(spectator) 
        for i, val in ipairs(spectators) do 
            if (val == spectator) then 
                table.remove(spectators, i) 
            end 
        end 
    end 
) 
  
function elementCheck (elem) 
    if elem then 
        if isElement (elem) then 
            if (getElementType (elem) == 'player') then 
                return true 
            end 
        end 
    end 
    return false 
end 
  
function drawSpectators() 
    local textX = x - spectatorSettings.xOffset 
    local textY = spectatorSettings.yOffset 
     
    if (not isPlayerDead(localPlayer)) then 
  
    local s_Spectators = 'Spectadores:\n' 
        if (#spectators > 0) then 
        for i, v in ipairs(spectators) do 
            if elementCheck (v) then 
            local name = getPlayerName(v) 
                if (string.len(getPlayerName(v)) > spectatorSettings.charLimit) then 
                    name = string.sub(name, 0, spectatorSettings.charLimit)..'..' 
                end 
            if (i > spectatorSettings.count) then 
                s_Spectators = s_Spectators..tostring(#spectators - spectatorSettings.count)..' more' 
                break 
            else     
                s_Spectators = s_Spectators..name..'\n' 
            end 
            else 
                table.remove (spectators, k) 
            end 
        end 
        else 
            if (spectatorSettings.alwaysShow) then 
                s_Spectators = s_Spectators..'Nadien' 
            else 
                s_Spectators = '/' 
            end 
        end 
    dxDrawText (s_Spectators, textX, textY, x, y, tocolor(0, 205, 205, 205), 1.3, 'banghotic') 
    end 
end 
addEventHandler('onClientRender', root, drawSpectators) 
     
     
         

spectators_s.lua

--[[ 
  
*   Multi Theft Auto - Spectators 
  
*   spectators_s.lua 
  
*   Original file by Zango 
  
--]] 
  
  
local GATHER_FREQUENCY = 1000 -- how often in ms it should run the "spectator" function 
  
local playerData = {} 
local spectator_players = {} 
  
addEvent('onCameraTargetChange') 
addEvent('removeClient', true) 
addEvent('addClient', true) 
  
function elementCheck (elem) 
    if elem then 
        if isElement (elem) then 
            if (getElementType (elem) == 'player') then 
                return true 
            end 
        end 
    end 
    return false 
end 
  
function repairTable() 
    for i, val in ipairs (spectator_players) do 
        if not elementCheck (val) then 
            if playerData[val] then 
                if playerData[val].target then 
                    if (elementCheck(playerData[val].target) and playerData[val].target ~= val) then 
                        triggerClientEvent(playerData[val].target, 'removeSpectator', playerData[val].target, player) 
                    end 
                end 
            for k, v in ipairs (playerData) do 
                if (k == val) then 
                    table.remove (playerData, k) 
                end 
            end 
            end 
        table.remove (spectator_players, i) 
        end 
    end 
end 
  
function spectators() 
    for i, player in ipairs(spectator_players) do 
        if elementCheck (player) then 
            local target = getCameraTarget(player) 
            if (not playerData[player]) then 
                playerData[player] = {} 
            end 
         
            if (target ~= playerData[player].target) then -- if the target is different from previous one 
                playerData[player].previous = playerData[player].target -- store the old target 
                playerData[player].target = target -- store the new target 
                triggerEvent('onCameraTargetChange', player, playerData[player].target, playerData[player].previous) 
            end 
        else 
            repairTable() 
        end 
    end 
end 
setTimer(spectators, GATHER_FREQUENCY, 0) 
  
addEventHandler('onCameraTargetChange', root, 
    function(target, oldTarget) 
        if elementCheck (oldTarget) then -- if the old target is valid(ie. not false or nil(in which case the camera was fixed)) 
            triggerClientEvent(oldTarget, 'removeSpectator', oldTarget, source) -- trigger for the old target to remove from his list 
        end 
        if (target == source) or (not target) then -- if the new target is invalid or facing the player who invoked the event 
            return 
        end 
        if elementCheck (target) then 
            triggerClientEvent(target, 'addSpectator', target, source) -- else we add the player to the targets list 
        end 
    end 
) 
  
function removeClient() 
    if (playerData[source]) then 
        if (playerData[source].target) then 
            triggerClientEvent(playerData[source].target, 'removeSpectator', playerData[source].target, source) 
        end 
    playerData[source] = nil 
    end 
        for i, val in ipairs(spectator_players) do 
            if (val == source) then 
                table.remove(spectator_players, i) 
            end 
        end 
end 
addEvent ('removeClient') 
addEventHandler ('removeClient', root, removeClient) 
  
function addClient() 
    if elementCheck (source) then 
        table.insert(spectator_players, source) 
    end 
end 
addEvent ('addClient', true) 
addEventHandler ('addClient', root, addClient) 
  
addEventHandler ('onPlayerQuit', root, removeClient) 
  
  
  
  
thx  -- s:D -->  

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...