• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua flaw (cast on) TFS 1.2-8.6

Gaber Zen

Well-Known Member
Joined
Apr 22, 2023
Messages
224
Reaction score
51
Location
Egypt
Hello Everybody
Tfs 1.2/Clinet 8.6
Player use cast on and after dead want to open cast/ SAY (Your cast stream already disabled), Want to be use /cast off to open agine.
Lua:
function onSay(cid, words, param, channelId)
if(not checkExhausted(cid, 666, 5)) then
return true
end

local t, data = string.explode(param, " ", 1), getPlayerSpectators(cid)
if(isInArray({'off', 'no', 'disable'}, t[1])) then
if getPlayerStorageValue(cid, 45503) > 0 then
data.mutes = {}
data.broadcast = false
doPlayerSetSpectators(cid, data)
setPlayerStorageValue(cid, 45503, 0)

db.executeQuery("UPDATE players SET broadcasting = 0, viewers = 0 WHERE id = " .. getPlayerGUID(cid))
doPlayerSendTextMessage(cid, 25, "You have disabled your cast stream.")
local rates = getPlayerRates(cid)
if getPlayerStorageValue(cid, 45504) <= 0 then -- Check cast Password
doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]-0.09)
end
else
doPlayerSendTextMessage(cid, 25, "Your cast stream already disabled.")
return true
end
elseif(isInArray({'on', 'yes', 'enable'}, t[1])) then
if getPlayerStorageValue(cid, 45503) <= 0 then
data.broadcast = true
doPlayerSetSpectators(cid, data)
doPlayerOpenPrivateChannel(cid)
setPlayerStorageValue(cid, 45503, 1)

db.executeQuery("UPDATE players SET broadcasting = 1 WHERE id = " .. getPlayerGUID(cid))
local rates = getPlayerRates(cid)
if getPlayerStorageValue(cid, 45504) <= 0 then -- Check cast Password
doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]+0.09)
doPlayerSendTextMessage(cid, 25, "You have enabled your cast stream and now receive +10% monsters experience.")
else
doPlayerSendTextMessage(cid, 25, "You have enabled your cast stream. Remove the password to gain +10% monsters experience.")
end
else
doPlayerSendTextMessage(cid, 25, "Your cast stream already enabled.")
return true
end
elseif(isInArray({'show', 'count', 'see'}, t[1])) then
if(data.broadcast) then
local count = table.maxn(data.names)
if(count > 0) then
doPlayerSendTextMessage(cid, 25, "You are currently watched by " .. count .. " people.")
local str = ""
for _, name in ipairs(data.names) do
str = str .. (str:len() > 0 and ", " or "") .. name
end

doPlayerSendTextMessage(cid, 25, str .. ".")
else
doPlayerSendTextMessage(cid, 25, "None is watching your stream right now.")
end
else
doPlayerSendTextMessage(cid, 25, "You are not streaming right now.")
end
elseif(isInArray({'kick', 'remove'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
if(t[2] ~= "all") then
local found = false
for _, name in ipairs(data.names) do
if(t[2]:lower() == name:lower()) then
found = true
break
end
end

if(found) then
table.insert(data.kick, t[2])
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " has been kicked.")
else
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " not found.")
end
else
data.kick = data.names
doPlayerSetSpectators(cid, data)
end
else
doPlayerSendTextMessage(cid, 25, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, 25, "You are not streaming right now.")
end
elseif(isInArray({'ban', 'block'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
local found = false
for _, name in ipairs(data.names) do
if(t[2]:lower() == name:lower()) then
found = true
break
end
end

if(found) then
table.insert(data.bans, t[2])
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " has been banned.")
else
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " not found.")
end
else
doPlayerSendTextMessage(cid, 25, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, 25, "You are not streaming right now.")
end
elseif(isInArray({'unban', 'unblock'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
local found, i = 0, 1
for _, name in ipairs(data.bans) do
if(t[2]:lower() == name:lower()) then
found = i
break
end

i = i + 1
end

if(found > 0) then
table.remove(data.bans, found)
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " has been unbanned.")
else
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " not found.")
end
else
doPlayerSendTextMessage(cid, 25, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, 25, "You are not streaming right now.")
end
elseif(isInArray({'bans', 'banlist'}, t[1])) then
if(table.maxn(data.bans)) then
local str = ""
for _, name in ipairs(data.bans) do
str = str .. (str:len() > 0 and ", " or "") .. name
end

doPlayerSendTextMessage(cid, 25, "Currently banned spectators: " .. str .. ".")
else
doPlayerSendTextMessage(cid, 25, "Your ban list is empty.")
end
elseif(isInArray({'mute', 'squelch'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
local found = false
for _, name in ipairs(data.names) do
if(t[2]:lower() == name:lower()) then
found = true
break
end
end

if(found) then
table.insert(data.mutes, t[2])
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " has been muted.")
else
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " not found.")
end
else
doPlayerSendTextMessage(cid, 25, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, 25, "You are not streaming right now.")
end
elseif(isInArray({'unmute', 'unsquelch'}, t[1])) then
if(data.broadcast) then
if(t[2]) then
local found, i = 0, 1
for _, name in ipairs(data.mutes) do
if(t[2]:lower() == name:lower()) then
found = i
break
end

i = i + 1
end

if(found > 0) then
table.remove(data.mutes, found)
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " has been unmuted.")
else
doPlayerSendTextMessage(cid, 25, "Spectator " .. t[2] .. " not found.")
end
else
doPlayerSendTextMessage(cid, 25, "You need to type a name.")
end
else
doPlayerSendTextMessage(cid, 25, "You are not streaming right now.")
end
elseif(isInArray({'mutes', 'mutelist'}, t[1])) then
if(table.maxn(data.mutes)) then
local str = ""
for _, name in ipairs(data.mutes) do
str = str .. (str:len() > 0 and ", " or "") .. name
end

doPlayerSendTextMessage(cid, 25, "Currently muted spectators: " .. str .. ".")
else
doPlayerSendTextMessage(cid, 25, "Your mute list is empty.")
end
elseif(isInArray({'auth', 'protect', 'protection', 'protected'}, t[1])) then
if(isInArray({'off', 'no', 'disable'}, t[2])) then
data.auth = false
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, 25, "Your chat is now unprotected, all spectators can chat without authentication.")
elseif(isInArray({'on', 'yes', 'enable'}, t[2])) then
data.auth = true
doPlayerSetSpectators(cid, data)
doPlayerSendTextMessage(cid, 25, "Your chat is now protected, all spectators have to authenticate before they can talk.")
else
doPlayerSendTextMessage(cid, 25, "Your chat is currently " .. (data.auth and "protected" or "unprotected") .. " from guests.")
end
elseif(isInArray({'password', 'guard'}, t[1])) then
if(t[2]) then
if(isInArray({'off', 'no', 'disable'}, t[2])) then
if(data.password:len() ~= 0) then
db.executeQuery("UPDATE players SET broadcasting = broadcasting - 2 WHERE id = " .. getPlayerGUID(cid))
end

data.password = ""
doPlayerSetSpectators(cid, data)
local rates = getPlayerRates(cid)
if getPlayerStorageValue(cid, 45503) > 0 and getPlayerStorageValue(cid, 45504) > 0 then -- Check Cast On and password
doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]+0.09)
doPlayerSendTextMessage(cid, 25, "You have removed password for your cast stream and getting +10% monsters experience.")
else
doPlayerSendTextMessage(cid, 25, "You have removed password for your cast stream.")
end

setPlayerStorageValue(cid, 45504, 0)
else
if(data.password:len() ~= 0) then
db.executeQuery("UPDATE players SET broadcasting = broadcasting + 2 WHERE id = " .. getPlayerGUID(cid))
end

data.password = string.trim(t[2])
doPlayerSetSpectators(cid, data)
local rates = getPlayerRates(cid)
if getPlayerStorageValue(cid, 45503) > 0 and getPlayerStorageValue(cid, 45504) <= 0 then -- Check Cast On and password off
doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]-0.09)
doPlayerSendTextMessage(cid, 25, "You have set new password for your stream. Remove the password to gain +10% monsters experience.")
else
doPlayerSendTextMessage(cid, 25, "You have set new password for your stream.")
end

setPlayerStorageValue(cid, 45504, 1)
end
elseif(data.password ~= "") then
doPlayerSendTextMessage(cid, 25, "Your stream is currently protected with password: " .. data.password .. ".")
else
doPlayerSendTextMessage(cid, 25, "Your stream is currently not protected.")
end
elseif(isInArray({'status', 'info'}, t[1])) then
doPlayerSendTextMessage(cid, 25, "Your stream is currently " .. (data.broadcast and "enabled" or "disabled") .. ".")
else
doPlayerPopupFYI(cid, "Available commands:\n\n/cast on - enables the stream\n/cast off - disables the stream\n/cast password {password} - sets a password on the stream\n/cast password off - disables the password protection\n/cast auth on - enables requirement of authentication on chat\n/cast auth off - disables requirement of authentication on chat\n/cast kick {name} - kick a spectator from your stream\n/cast ban {name} - locks spectator IP from joining your stream\n/cast unban {name} - removes banishment lock\n/cast bans - shows banished spectators list\n/cast mute {name} - mutes selected spectator from chat\n/cast unmute {name} - removes mute\n/cast mutes - shows muted spectators list\n/cast show - displays the amount and nicknames of current spectators\n/cast status - displays stream status")
end

return true
end
 
Last edited:
Is there some logic onDeath that updates broadcasting in players table or some logic that restarts player storage back?
As it's simply because of this condition:
Lua:
if getPlayerStorageValue(cid, 45503) <= 0 then
 
what i can do, deleted the Line or !!??
how fix it? i`m not good Scripter...
you can fix it?
if player logout or dead cant use cast, need to use /cast off Frist.
 
Last edited:
Back
Top