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

Cast System (Viewers)

Pastel16

New Member
Joined
Jul 22, 2013
Messages
49
Reaction score
3
Location
Poland
When the number of viewers is above 1, the database does not update it.
6jlwsh.png


cast.php:
Code:
function onSay(cid, words, param, channel)
   local tmp = param:explode(" ")
   if not(tmp[1]) then
     return doPlayerSendCancel(cid, "Parameters needed")
   end
  
   if tmp[1] == "on" then
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast has started.")
     doPlayerSetCastState(cid, true)
     doPlayerSave(cid)
     db.query("UPDATE players SET cast=1 WHERE id="..getPlayerGUID(cid))
   elseif getPlayerCast(cid).status == false then
     return doPlayerSendCancel(cid, "Your cast has to be running for this action.")
   elseif tmp[1] == "off" then
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast has ended.")
     doPlayerSetCastState(cid, false)
         doPlayerSave(cid)
         db.query("UPDATE players SET cast=0 WHERE id="..getPlayerGUID(cid))
   elseif isInArray({"pass", "password", "p"}, tmp[1]) then
     if not(tmp[2]) then
       return doPlayerSendCancel(cid, "You need to set a password")
     end
    
     if tmp[2]:len() > 10 then
       return doPlayerSendCancel(cid, "The password is too long. (Max.: 10 letters)")
     end
    
     if tmp[2] == "off" then
       doPlayerSetCastPassword(cid, "")
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast password has been removed.")
     else
       doPlayerSetCastPassword(cid, tmp[2])
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast password was set to: " .. tmp[2])
     end
   elseif isInArray({"desc", "description", "d"}, tmp[1]) then
     local d = param:gsub(tmp[1]..(tmp[2] and " " or ""), "")

     if not(d) or d:len() == 0 then
       return doPlayerSendCancel(cid, "You need to specify a description.")
     end

     if d:len() > 50 then
       return doPlayerSendCancel(cid, "The description is too long. (Max.: 50 letters)")
     end

     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast description was set to: \""..d.."\"")
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, d)
     doPlayerSetCastDescription(cid, d)
     db.query("UPDATE players SET castDescription='"..d.."' WHERE id="..getPlayerGUID(cid))
   elseif tmp[1] == "ban" then
     if not(tmp[2]) then
       return doPlayerSendCancel(cid, "Specify a spectator that you want to ban.")
     end
    
     if doPlayerAddCastBan(cid, tmp[2]) then
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been banned.")
     else
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be banned.")
     end
   elseif tmp[1] == "unban" then
     if not(tmp[2]) then
       return doPlayerSendCancel(cid, "Specify the person you want to unban.")
     end
    
     if doPlayerRemoveCastBan(cid, tmp[2]) then
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been unbanned.")
     else
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be unbanned.")
     end
   elseif param == "bans" then
     local t = getCastBans(cid)
     local text = "Cast Bans:\n\n"
     for k, v in pairs(t) do
       text = text .. "*" .. v.name .. "\n"
     end
     if text == "Cast Bans:\n\n" then
       text = text .. "No bans."
     end
     doShowTextDialog(cid, 5958, text)
   elseif tmp[1] == "mute" then
     if not(tmp[2]) then
       return doPlayerSendCancel(cid, "Specify a spectator that you want to mute.")
     end
    
     if doPlayerAddCastMute(cid, tmp[2]) then
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been muted.")
     else
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be muted.")
     end
   elseif tmp[1] == "unmute" then
     if not(tmp[2]) then
       return doPlayerSendCancel(cid, "Specify the person you want to unmute.")
     end
    
     if doPlayerRemoveCastMute(cid, tmp[2]) then
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been unmuted.")
     else
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be unmuted.")
     end
   elseif param == "mutes" then
     local t = getCastMutes(cid)
     local text = "Cast Mutes:\n\n"
     for k, v in pairs(t) do
       text = text .. "*" .. v.name .. "\n"
     end
     if text == "Cast Bans:\n\n" then
       text = text .. "No mutes."
     end
     doShowTextDialog(cid, 5958, text)
   elseif param == "viewers" then
     local t = getCastViewers(cid)
     local text, count = "Cast Viewers:\n#Viewers: |COUNT|\n\n", 0
     for _,v in pairs(t) do
       count = count + 1
       text = text .. "*" .. v.name .."\n"
     end
    
     if text == "Cast Viewers:\n#Viewers: |COUNT|\n\n" then text = "Cast Viewers:\n\nNo viewers." end
     text = text:gsub("|COUNT|", count)
     doShowTextDialog(cid, 5958, text)
   elseif param == "status" then
     local t, c = getCastViewers(cid), getPlayerCast(cid)
     local count = 0
     for _,v in pairs(t) do count = count + 1 end
    
     doShowTextDialog(cid, 5958, "Cast Status:\n\n*Viewers:\n  " .. count .. "\n*Description:\n  "..(c.description == "" and "Not set" or c.description).."\n*Password:\n  " .. (c.password == "" and "Not set" or "Set - '"..c.password.."'"))
   elseif param == "update" then
     if getPlayerStorageValue(cid, 656544) > os.time() then
       return doPlayerSendCancel(cid, "You used this command lately. Wait: " .. (getPlayerStorageValue(cid, 656544)-os.time()) .. " sec.")
     end
     doPlayerSave(cid)
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The cast settings have been updated.")
     doPlayerSetStorageValue(cid, 656544, os.time()+60)
   end
   return true
end

iologindata.cpp
Code:
  query << "`cast` = " << (player->getCastingState() ? 1 : 0) << ", ";
   query << "`castViewers` = " << player->getCastViewerCount() << ", ";
   query << "`castDescription` = " << db->escapeString(player->getCastDescription()) << ", ";
 
Not the best optimal way, but it will work. I have used it in the past, hope it will be useful for you.
Code:
function onThink(interval)
    local players = getPlayersOnline()
    for _, pid in ipairs(players) do
    local data = getPlayerSpectators(pid)
        if(data.broadcast) then
            db.executeQuery("UPDATE `players` set `viewers` = " .. table.maxn(data.names) .. " where `id` = " .. getPlayerGUID(pid) .. ";")
        end
    end

    return true
end
 
Still the same.
Maybe in the wrong place it added. Where to add?
Code:
function onThink(interval)
local players = getPlayersOnline()
for _, pid in ipairs(players) do
local data = getPlayerSpectators(pid)
if(data.broadcast) then
db.executeQuery("UPDATE `players` set `viewers` = " .. table.maxn(data.names) .. " where `id` = " .. getPlayerGUID(pid) .. ";")
end
end

return true
end
 
Still the same.
Where to add?
Code:
function onThink(interval)
local players = getPlayersOnline()
for _, pid in ipairs(players) do
local data = getPlayerSpectators(pid)
if(data.broadcast) then
db.executeQuery("UPDATE `players` set `viewers` = " .. table.maxn(data.names) .. " where `id` = " .. getPlayerGUID(pid) .. ";")
end
end

return true
end
add where did you have added, deleted the old files and copy paste these... regards
 
np, an advice , im dont try to be bad but try to do it first and if didn't work just ask :) just an advice ;) regars dude
 
If someone doesn't work, here is the solution.

Add:
Code:
db.query("UPDATE players SET castViewers='".. count .."' WHERE id="..getPlayerGUID(cid))
After
Code:
if text == "Cast Viewers:\n#Viewers: |COUNT|\n\n" then text = "Cast Viewers:\n\nNo viewers." end
text = text:gsub("|COUNT|", count)
doShowTextDialog(cid, 5958, text)
 
Not the best optimal way, but it will work. I have used it in the past, hope it will be useful for you.
Code:
function onThink(interval)
    local players = getPlayersOnline()
    for _, pid in ipairs(players) do
    local data = getPlayerSpectators(pid)
        if(data.broadcast) then
            db.executeQuery("UPDATE `players` set `viewers` = " .. table.maxn(data.names) .. " where `id` = " .. getPlayerGUID(pid) .. ";")
        end
    end

    return true
end

where i add this?
 
where i add this?
open data/globalevents/scripts/
make a lua file with this script and name it cast.lua :
Code:
function onThink(interval)
    local players = getPlayersOnline()
    for _, pid in ipairs(players) do
    local data = getPlayerSpectators(pid)
        if(data.broadcast) then
            db.executeQuery("UPDATE `players` set `viewers` = " .. table.maxn(data.names) .. " where `id` = " .. getPlayerGUID(pid) .. ";")
        end
    end

    return true
end
then open data/globalevents/
and open globalevents.xml
and add this line
Code:
        <globalevent name="cast" interval="5000" script="cast.lua"/>
 
Back
Top Bottom