Jump to content

spectators resource doesnt work??


Admigo

Recommended Posts

Heey all,

I am using this resource of mta to show the players who spectate you but this resource doesnt work cause it shows none.

https://community.multitheftauto.com/ind ... ls&id=3136

Server side:

[**********RRRRRRRBBBBBBB***********] 
[url=http://www.expertgamerz.clan.su]http://www.expertgamerz.clan.su[/url] << download script here  
  
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) 
  
  

Client side:

                                        ------------------------------------------------------ 
                                        ----- Spectators Script Downloaded From Comunity ----- 
                                        ------- Created By Zango Modified by SoundWave ------- 
                                        ------------------------------------------------------ 
  
-- Set up variables and settings 
local x, y = guiGetScreenSize () 
local localPlayer = getLocalPlayer() 
local dxDraw = {} 
local dxDrawOutline = {} 
  
  
local spectatorSettings = { 
xOffset = (x/6.3), 
yOffset = y - (y/1.4)} 
  
  
local showSpectators = true 
  
function changeSpectatorsEnabled() 
    showSpectators = not showSpectators 
end 
bindKey("F2","down",changeSpectatorsEnabled) 
  
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() 
    if showSpectators == true then 
        local textX = x - spectatorSettings.xOffset 
        local textY = spectatorSettings.yOffset 
  
        scale = getScale(x) 
  
        dxDrawText("Spectators: ",textX - 1, textY + 1, x, y, tocolor(0,0,0,255), scale, 'bankgothic') 
        dxDrawText("Spectators: ",textX, textY, x, y, tocolor(255,190,0,255), scale, 'bankgothic') 
  
        if not (isPlayerDead(localPlayer)) then 
            if (#spectators > 0) then 
                for i, v in ipairs(spectators) do 
                    if elementCheck (v) then 
                        local name = getPlayerName(v) 
                        if (i) then 
                            dxDrawOutline[i] = dxDrawText (" "..string.gsub(name,"#%x%x%x%x%x%x",""), textX - 1, (textY + scale) + (dxGetFontHeight(scale,'bankgothic') * i) + 1.5, x, y, tocolor(0,0,0, 255), scale, 'bankgothic') 
                            dxDraw[i] = dxDrawColorText (" "..name, textX, (textY + scale) + (dxGetFontHeight(scale,'bankgothic') * i), x, y, tocolor(255, 255, 255, 255), scale, 'bankgothic') 
                        end 
                    else 
                        table.remove (spectators, k) 
                    end 
                end 
            else 
                dxDrawOutline[1] = dxDrawText ("None.", textX - 1, (textY + scale) + dxGetFontHeight(scale,'bankgothic') + 1.5, x, y, tocolor(0,0,0, 255), scale, 'bankgothic') 
                dxDraw[1] = dxDrawColorText ("None.", textX, (textY + scale) + dxGetFontHeight(scale,'bankgothic'), x, y, tocolor(255, 255, 255, 255), scale, 'bankgothic') 
            end 
        end 
    end 
end 
addEventHandler('onClientRender', root, drawSpectators) 
  
  
function dxDrawColorText(str, ax, ay, bx, by, color, scale, font) 
    local pat = "(.-)#(%x%x%x%x%x%x)" 
    local s, e, cap, col = str:find(pat, 1) 
    local last = 1 
    while s do 
        if cap == "" and col then color = tocolor(tonumber("0x"..col:sub(1, 2)), tonumber("0x"..col:sub(3, 4)), tonumber("0x"..col:sub(5, 6)), 255) end 
        if s ~= 1 or cap ~= "" then 
            local w = dxGetTextWidth(cap, scale, font) 
            dxDrawText(cap, ax, ay, ax + w, by, color, scale, font) 
            ax = ax + w 
            color = tocolor(tonumber("0x"..col:sub(1, 2)), tonumber("0x"..col:sub(3, 4)), tonumber("0x"..col:sub(5, 6)), 255) 
        end 
        last = e + 1 
        s, e, cap, col = str:find(pat, last) 
    end 
    if last <= #str then 
        cap = str:sub(last) 
        local w = dxGetTextWidth(cap, scale, font) 
        dxDrawText(cap, ax, ay, ax + w, by, color, scale, font) 
    end 
end 
  
  
function getScale(w) 
    local scale = (w*0.5)/1000 
    return scale 
end 

How can i fix it?

Thanks Admigo

Link to comment

or keep the 2 lines ( 1. - 2. ) in server side but just copy and change them to this:

--{[**********RRRRRRRBBBBBBB***********]} 
--{http://www.expertgamerz.clan.su << download script here } 

if that dont work do this:

----[**********RRRRRRRBBBBBBB***********] 
-----http://www.expertgamerz.clan.su << download script here  

Link to comment
or keep the 2 lines ( 1. - 2. ) in server side but just copy and change them to this:
--{[**********RRRRRRRBBBBBBB***********]} 
--{http://www.expertgamerz.clan.su << download script here } 

if that dont work do this:

----[**********RRRRRRRBBBBBBB***********] 
-----http://www.expertgamerz.clan.su << download script here  

Would be easier to use

--[[  
text 
]] 

Link to comment
Thanks! Worked great. Only i need one thing: The spectators name are colored that is good but only its not detecting the team color.

How can i fix it?

for id, player in ipairs(getElementsByType("player")) do 
local team = getPlayerTeam( player ) 
    if not (team) then return end 
    local r, g, b = getTeamColor(team) 

Then edit where you draw the dxtext.

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