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