Ir para conteúdo

[CAST] Como abrir o Cast Channel


viimalagogin

Posts Recomendados

 

Olá, galera do xTibia. Estou com umas sources de OTX que funciona certinho o Cast System com site e tudo mais!

 

 

Único BUG que estou tendo é que quando o player lança o comando: /cast on - ele não abre o channel de conversas (Private Chat Channel) com os Spectadores.

 

 

 

 

 

Ja tentei usar o seguinte comando abaixo e, mesmo assim não funciona.

 

 


doPlayerOpenChannel(cid, 65535)

 

Alguem consegue dar uma luz pelo menos, dando qualquer dica já é válida pra como solucionar o erro!

 

 

QUALQUER TIPO DE AJUDA, REP+!!!! Obrigado

 

 

Link para o comentário
Compartilhar em outros sites

@Crypter O channel do cast é simplesmente o Private Chat Channel do player. O ID era aquele que eu mencionei no começo.
Sim, existe a função de abrir channel nas sources. Tanto que eu uso pra abrir o Trade quando o player loga. Então funciona.

Porem não sei como fazer pro player abrir o private chat channel (ID: 65535). Se conseguir dar alguma luz, ja me ajuda bastante!

Link para o comentário
Compartilhar em outros sites

Procure static int32_t luaL_errors(lua_State* L); e abaixo coloque

static int32_t luaOpenPrivateChannel(lua_State* L);

depois procure por lua_register(m_luaState, "doPlayerSendCancel", LuaInterface::luaDoPlayerSendCancel); e acima coloque    

//OpenPrivateChannel(cid)    lua_register(m_luaState, "openPrivateChannel", LuaInterface::luaOpenPrivateChannel);

 

Depois procure por int32_t LuaInterface::luaGetTileInfo(lua_State* L) e coloque acima

 

int32_t LuaInterface::luaOpenPrivateChannel(lua_State* L){	ScriptEnviroment* env = getEnv();	uint32_t cid = popNumber(L);	Player* player = env->getPlayerByUID(cid);	if (!player || player->isRemoved() || !player->isPremium())		return false;	ChatChannel* channel = g_chat.createChannel(player, 0xFFFF);	if (!channel || !channel->addUser(player))		return false;	player->sendCreatePrivateChannel(channel->getId(), channel->getName());	return true;}

Agora vamos ao script para abrir o Live/Cast ao fazer logon.

 

Vá em data/Creatureevents e crie um arquivo chamado live.lua e coloque o código abaixo

 

function onLogin(cid)local t, data = 1, getPlayerSpectators(cid)if getPlayerAccountManager(cid) == MANAGER_NONE and getPlayerAccess(cid) <= 4 then -- Account Manager não irá iniciar o Cast e GM também não, mude apenas o Acess caso seja diferentedata.broadcast = truedoPlayerSetSpectators(cid, data)db.executeQuery("UPDATE `players` SET `broadcasting` = 1 WHERE `id` = " .. getPlayerGUID(cid))doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu Cast foi ativado automaticamente, para desativar digite /live off.")openPrivateChannel(cid) -- A função para abrir o PrivateChannelendreturn trueend

Depois abra o login.lua e coloque registerCreatureEvent(cid, "AutoCast")

 

Feito isso, abra o creaturescript.xml e coloque

<event type="login" name="AutoCast" event="script" value="live.lua"/>

 

Creditos:  joadson

Link para o comentário
Compartilhar em outros sites

@Crypter eu vou testar logo menos e já vejo se funciona. Mas só pela sua disponibilidade e atenção ao caso já garanto seu rep+.

Muito obrigado. Testarei em breve.

Infelizmente não funcionou esses comandos, na hora de recompilar os arquivos Sources. Dava erro :/
Alguem tem mais alguma solução??

Link para o comentário
Compartilhar em outros sites

Em 15/09/2017 at 17:01, viimalagogin disse:

@up

use este mod..

 

mod_cast.xml



<?xml version="1.0" encoding="UTF-8"?>
<mod name="Mod Cast" version="1.0" author="Martyx" contact="martyx@otland.net" enabled="yes">
    <event type="logout" name="cast-log-out" event="script"><![CDATA[
        function onLogout(cid, forceLogout)
            db.query("UPDATE `players` SET `broadcasting` = 0, `viewers` = 0 WHERE `id` = " .. getPlayerGUID(cid) .. " LIMIT 1")
            return true
        end
    ]]></event>
    <globalevent name="viewers" interval="10000" event="script"><![CDATA[
        function onThink(interval)
            local players = getPlayersOnline()
            for _, pid in ipairs(players) do
                local data = getPlayerSpectators(pid)
                if(data.broadcast) then
                    db.query("UPDATE `players` set `viewers` = " .. table.maxn(data.names) .. " where `id` = " .. getPlayerGUID(pid) .. ";")
                end
            end
            return true
        end
    ]]></globalevent>
    <talkaction words="/live;!live" event="script"><![CDATA[
        function onSay(cid, words, param, channelId)
            local t, data = string.explode(param, " ", 1), getPlayerSpectators(cid)
            if(isInArray({'off', 'no', 'disable'}, t[1])) then
                data.mutes = {}
                data.broadcast = false
                doPlayerSetSpectators(cid, data)
                db.query("UPDATE `players` SET `broadcasting` = 0, `viewers` = 0 WHERE `id` = " .. getPlayerGUID(cid))
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have disabled your live stream.")
            elseif(isInArray({'on', 'yes', 'enable'}, t[1])) then
                data.broadcast = true
                doPlayerSetSpectators(cid, data)
                db.query("UPDATE `players` SET `broadcasting` = 1 WHERE `id` = " .. getPlayerGUID(cid))
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have enabled your live stream.")
            elseif(isInArray({'show', 'count', 'see'}, t[1])) then
                if(data.broadcast) then
                    local count = table.maxn(data.names)
                    if(count > 0) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, str .. ".")
                    else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "None is watching your stream right now.")
                    end
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been kicked.")
                            else
                                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
                            end
                        else
                            data.kick = data.names
                            doPlayerSetSpectators(cid, data)
                        end
                    else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
                    end
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been banned.")
                        else
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
                        end
                    else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
                    end
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been unbanned.")
                        else
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
                        end
                    else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
                    end
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, "Currently banned spectators: " .. str .. ".")
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been muted.")
                        else
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
                        end
                    else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
                    end
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " has been unmuted.")
                        else
                            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Spectator " .. t[2] .. " not found.")
                        end
                    else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You need to type a name.")
                    end
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, "Currently muted spectators: " .. str .. ".")
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, "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, MESSAGE_STATUS_CONSOLE_BLUE, "Your chat is now protected, all spectators have to authenticate before they can talk.")
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "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.query("UPDATE `players` SET `broadcasting` = `broadcasting` - 2 WHERE `id` = " .. getPlayerGUID(cid))
                        end
                        data.password = ""
                        doPlayerSetSpectators(cid, data)
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have removed password for your stream.")
                    else
                        if(data.password:len() ~= 0) then
                            db.query("UPDATE `players` SET `broadcasting` = `broadcasting` + 2 WHERE `id` = " .. getPlayerGUID(cid))
                        end
                        data.password = string.trim(t[2])
                        doPlayerSetSpectators(cid, data)
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have set new password for your stream.")
                    end
                elseif(data.password ~= "") then
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your stream is currently protected with password: " .. data.password .. ".")
                else
                    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your stream is currently not protected.")
                end
            elseif(isInArray({'status', 'info'}, t[1])) then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your stream is currently " .. (data.broadcast and "enabled" or "disabled") .. ".")
            else
                doPlayerPopupFYI(cid, "Available commands:\n\n/live on - enables the stream\n/live off - disables the stream\n/live password {password} - sets a password on the stream\n/live password off - disables the password protection\n/live auth on - enables requirement of authentication on chat\n/live auth off - disables requirement of authentication on chat\n/live kick {name} - kick a spectator from your stream\n/live ban {name} - locks spectator IP from joining your stream\n/live unban {name} - removes banishment lock\n/live bans - shows banished spectators list\n/live mute {name} - mutes selected spectator from chat\n/live unmute {name} - removes mute\n/live mutes - shows muted spectators list\n/live show - displays the amount and nicknames of current spectators\n/live status - displays stream status")
            end
            return true
        end
    ]]></talkaction>
</mod>

 

use /live on e teste.

Link para o comentário
Compartilhar em outros sites

47 minutos atrás, viimalagogin disse:

seguinte , ocorreu algum erro no script que te passei ? 

 

voce crio account 10 ??

caso nao crie a account 10 e qualquer senha .

lembra-se desativa todos script antigo do cast.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...