Jump to content

Spectator Diferent


brad

Recommended Posts

Posted

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 -->  

  • Discord Moderators
Posted

Your error is at line 92 in spectators_c.lua

dxDrawText (s_Spectators, textX, textY, x, y, tocolor(0, 205, 205, 205), 1.3, 'banghotic') 

It's bankgothic not banghotic

  • Discord Moderators
Posted

Ah, so when you're spectating someone, you want to see who else is spectating him too?

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...