Verifique o Id do channel do cast , veja se tem a função de abrir channel na source
- Fórum
- OTServ
- Pedidos
- Tópicos Sem Resposta
- [CAST] Como abrir o Cast Channel
[CAST] Como abrir o Cast Channel
Por viimalagogin, 08 de set. de 2017 em Tópicos Sem Resposta
info
Grupo: Campones
Registrado: 06/07/17
Posts: 25
Reputação: 0
Gênero: Masculino

@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!
info
Grupo: Campones
Registrado: 06/07/17
Posts: 25
Reputação: 0
Gênero: Masculino

@up alguém??
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
info
Grupo: Campones
Registrado: 06/07/17
Posts: 25
Reputação: 0
Gênero: Masculino

@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??
info
Grupo: Campones
Registrado: 06/07/17
Posts: 25
Reputação: 0
Gênero: Masculino

@up
info
Grupo: Campones
Registrado: 06/07/17
Posts: 25
Reputação: 0
Gênero: Masculino

@up
info
Grupo: Artesão
Registrado: 05/06/15
Posts: 119
Reputação: +31
Gênero: Outro

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.
info
Grupo: Campones
Registrado: 06/07/17
Posts: 25
Reputação: 0
Gênero: Masculino

@Dragon Ball Hiper Testei e nao foi, amigo ![]()
info
Grupo: Artesão
Registrado: 05/06/15
Posts: 119
Reputação: +31
Gênero: Outro

9 minutos atrás, viimalagogin disse:@Dragon Ball Hiper Testei e nao foi, amigo
versao otx amigo ?
info
Grupo: Campones
Registrado: 06/07/17
Posts: 25
Reputação: 0
Gênero: Masculino

@Dragon Ball Hiper OTX 0.4
info
Grupo: Artesão
Registrado: 05/06/15
Posts: 119
Reputação: +31
Gênero: Outro

47 minutos atrás, viimalagogin disse:@Dragon Ball Hiper OTX 0.4
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.
info
Grupo: Campones
Registrado: 06/07/17
Posts: 25
Reputação: 0
Gênero: Masculino

@Dragon Ball Hiper Nao deu nenhum erro na distro.
Sim já tenho a account 10/xhajfhei
Vou tentar desativando os scripts do cast que estao no: Talkactions, creaturescript e globalevents
Nao funciounou amigo @Dragon Ball Hiper ![]()




info
Grupo: Campones
Registrado: 06/07/17
Posts: 25
Reputação: 0
Gênero: Masculino
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