otímo systema, ajudara muito ai que não tem as 'soures' do seu servidor, abraços (;
- Fórum
- OTServ
- Recursos
- Scripting
- Mods, funções e outros
- Sistema de TV Em Lua
Sistema de TV Em Lua
Por caotic, 30 de jan. de 2013 em Mods, funções e outros
info
Grupo: Infante
Registrado: 25/01/12
Posts: 1.6k
Reputação: +330

info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

.
Esqueci da lib no tópico me desculpe.
Foi adicionado.
Estarei fazendo o video
Meu amigo caotic.
Eu até destacaria seu tópico no portal do xtibia.com. Mas como disse, só destacarei seus trabalhos quando você aprender que a identação não é inútil, muito menos desnecessária.
Um grande abração.
Editado Janeiro 31 por Oneshot
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

Meu amigo caotic. Eu até destacaria seu tópico no portal do xtibia.com. Mas como disse, só destacarei seus trabalhos quando você aprender que a identação não é inútil, muito menos desnecessária. Um grande abração.
Não acho um bom critério avaliar se o script tem identação ou não para ir para o portal.
Mais e você que manda meu caro coordenador.
Abraços.
"Vá em creaturescripts e crie um arquivo lua e coloque isto:" <--- criar um script chamado tv (só uma observação, pra caso ficarem com dúvidas)
SUGESTÃOo script pode se rum modo do player "achar" onde o outro está e ir matar ele... então, poderia colcoar uma maneira onde o player que será assistido aceite a transmissão, ou seja. Suponha que entro na sua TV, então você recebe uma notificação de pedido e escolhe se quer ou não ser aceito para que o outro lhe veja.
Editado Janeiro 31 por Lolksky
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

ui bem ousado criar isso em lua kkk meus parabens mano... -cade o brun para avaliar neh auahu-
edit: aki foi erro do forum ou ta errado ms? ;x
if on == "off" or on ~=- "on" then
Editado Janeiro 31 por Slicer
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

ui bem ousado criar isso em lua kkk meus parabens mano... -cade o brun para avaliar neh auahu-
edit: aki foi erro do forum ou ta errado ms? ;x
if on == "off" or on ~=- "on" then
Erro do forum.
Ja to fazendo o upload do vídeo(357 mb pqp).
Eu to revendo o script para retirar bugs.
Protinho o vídeo foi adicionado ao tópico
Editado Fevereiro 1 por caotic
Existem alguns IDs de itens sem sprite que você pode usar junto com a função doSetItemOutfit(cid, item[, time = -1]) para simular uma invisibilidade mais interessante. E, também, acho engraçado você não ter usado o doCreatureSetNoMove(cid, move) e o doCreatureSetHideHealth(cid, hide).
Opa parabens, otimo script, apesar de eu axar que feito em C++ ficaria muito mais simples e estavel.
E One, se o cara não quer usar indentação deixa ele ué, cada um tem seu proprio jeito de programar, se o dele é assim, não cabe ninguem a criticar.
Até mais.
Editado Fevereiro 3 por SUJA
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

Existem alguns IDs de itens sem sprite que você pode usar junto com a função doSetItemOutfit(cid, item[, time = -1]) para simular uma invisibilidade mais interessante. E, também, acho engraçado você não ter usado o doCreatureSetNoMove(cid, move) e o doCreatureSetHideHealth(cid, hide).
doCreatureSetHideHealth(cid, hide)
Seria um função nativa de Lua nunca ouvi falar(a não ser em pokemon)
A função doCreatureSetNoMove estarei adicionando.
Obrigado pela sugestão.
Editado Fevereiro 1 por caotic
tirando que quem está assistindo pode empurrar, dar rotate, use, atacar e fazer diversas outras ações, dá pra usar
mas isso aí está completamente passível de abuso, já que se você adicionar o hideHealth, os players não poderão ser atacados por outros players, mas poderão atacar... roubar itens em depot, caçar em um lugar e quando quiser sair da hunt, basta desligar o channel e já volta pro lugar antigo...
e o intervalo de acompanhar o dono do channel é grande, aí fica feio... um cara com muito speed que estiver andando continuadamente vai deixando o pessoal que tá assistindo pra trás, enfim... é complicado fazer esse sistema sem alterações no código fonte
Opa parabens, otimo script, apesar de eu axar que feito em C++ ficaria muito mais simples e instavel.
E One, se o cara não quer usar indentação deixa ele ué, cada um tem seu proprio jeito de programar, se o dele é assim, não cabe ninguem a criticar.
Até mais.
Se for para deixar instável, não vale a pena, não acha?
Enfim, só acho que não identar não é um jeito de programar, mas sim puro relaxo. E será bastante engraçado ver o dia que o caotic querer aprender Python, por exemplo. (Nada contra, caotic)
E, por favor, né, bancar advogado é muito chato rsrs.
Abraços.
Concordo com o Brun123. Desde que o script funcione, não vejo problema algum em deixar assim. Usa ele quem quer. Ele já está postando pra todo mundo e ainda precisa ser do jeito que os outros pedem. É demais... mas, cada um é cada um.
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

tirando que quem está assistindo pode empurrar, dar rotate, use, atacar e fazer diversas outras ações, dá pra usar
mas isso aí está completamente passível de abuso, já que se você adicionar o hideHealth, os players não poderão ser atacados por outros players, mas poderão atacar... roubar itens em depot, caçar em um lugar e quando quiser sair da hunt, basta desligar o channel e já volta pro lugar antigo...
e o intervalo de acompanhar o dono do channel é grande, aí fica feio... um cara com muito speed que estiver andando continuadamente vai deixando o pessoal que tá assistindo pra trás, enfim... é complicado fazer esse sistema sem alterações no código fonte
E chato fazer sem c++
Mais ta ai o exemplo que pode ser melhorado.
Afinal.
Da para fazer muita coisa com Lua.
Editado Fevereiro 1 por caotic








info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have
Ola galera xtibiaaana!.
Então meus amigos resolvi fazer um TV system aquele famoso sistema que o player cria uma channel(canal) e outros players poderão ver ele batalhando.
Estou retirando o máximo de bugs possíveis se você viu um bug não deixe de falar.
Vamos as explicações:
Primeiro o player cria uma channel usando o comando /tv(nome da channel) depois outro player ve sua channel na lista usando o comando /channel(list) logo ele quer entrar em sua channel então ele fala /channel(nome da channel).
Logo apos ele falar ele entra e começa a assistir mais depois ele quer sair então ele "desloga" e ele volta ao tempo.
Vamos a instalação.
Execute este comandos na sua database:
Vá em lib e crie um arquivo lua chamado de tv e coloque isto:
function createTv(cid, name) db.executeQuery("INSERT INTO `tv` (`name`, `player`, `conec`, `watch`) VALUES ('" .. name .. "', " .. getPlayerGUID(cid) .. ", 1, 0);") setPlayerStorageValue(cid, 23423, 1) doPlayerSave(cid) end function isTv(name) local tv = db.getResult("SELECT * FROM `tv` WHERE `name` = '".. name .."';") return tv:getID() ~= -1 and true or false end function getChannelPlayer(cid) return getPlayerStorageValue(cid, 23423) == 1 and true or getPlayerStorageValue(cid, 23423) == -1 and false end function getWatchingNameChannel(cid) return getPlayerStorageValue(cid, 44670) end local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local conditi = createConditionObject(CONDITION_MUTED) setConditionParam(conditi, CONDITION_PARAM_TICKS, 10000*10000) local condition = createConditionObject(CONDITION_INVISIBLE) setConditionParam(condition, CONDITION_PARAM_TICKS, 200000) function enterInTv(cid, name) local function comparePos(pos, post) local pos = getThingPos(pos) local post = getThingPos(post) return pos.x == pos.x or pos.y == pos.y or pos.z == pos.z and false or true end local function fallowPlayer(cid, player) if not isPlayer(cid) or getPlayerStorageValue(cid, 44670) == -1 then return true end if comparePos(cid, player) then doTeleportThing(cid, getThingPos(player)) doAddCondition(cid, condition) doAddCondition(cid, conditi) setCombatCondition(combat, condition) end return addEvent(fallowPlayer, 1800, cid, player) and doPlayerSave(cid) end setPlayerStorageValue(cid, 44670, name) local tv = db.getResult("SELECT * FROM `tv` WHERE `name` = '".. name .."';") local guid = tv:getDataInt("player") local player = getPlayerByNameWildcard(getPlayerNameByGUID(guid)) return fallowPlayer(cid, player) end function exitChannel(cid) doRemoveCondition(cid, CONDITION_INVISIBLE) doRemoveCondition(cid, CONDITION_MUTED) doRemoveCondition(cid, COMBAT_PARAM_AGGRESSIVE) doTeleportThing(cid, getPlayerMasterPos(cid)) setPlayerStorageValue(cid, 44670, -1) doPlayerSave(cid) end function doShowListChannel(cid) local tv = db.getResult("SELECT * FROM `tv` WHERE `player` ORDER BY `conec`") str = "Channel Disponiveis:\n\n" if tv:getID() == -1 then doShowTextDialog(cid, 1387, "Não ha channel disponiveis") return true end while true do local conect = tv:getDataInt("conec") local player = tv:getDataInt("player") local channel = tv:getDataString("name") local players = getPlayerNameByGUID(player) str = str .. channel .. " -("..players..")\n\n" if not tv:next() then doShowTextDialog(cid, 1397, str) break end end end function getConectTv(name) local tv = db.getResult("SELECT * FROM `tv` WHERE `name` = '".. name .."';") return tv:getDataInt("conec") == 1 and true or tv:getDataInt("conec") == 0 and false end function setStatusTv(cid, on) if on == "on" then return db.executeQuery("UPDATE `tv` SET `conec` = 1 WHERE `player` = "..getPlayerGUID(cid)) end if on == "off" or on ~= "on" then local tv = db.getResult("SELECT * FROM `tv` WHERE `player` = '".. getPlayerGUID(cid) .."';") local channel = tv:getDataString("name") db.executeQuery("UPDATE `tv` SET `conec` = 0 WHERE `player` = "..getPlayerGUID(cid)) for i =1, #getPlayersOnline() do if getWatchingNameChannel(getPlayersOnline()[i]) == channel and getPlayersOnline()[i] ~= cid then exitChannel(getPlayersOnline()[i]) doPlayerSendTextMessage(getPlayersOnline()[i], MESSAGE_INFO_DESCR, "A channel foi desligada") end end end endVá em talkactions crie um arquivo Lua chamado de tv coloque isto:
function onSay(cid, words, param, channel) local item = 1949 ----Item que você precisa local bloqued = {"sair", "list", "on", "off"} ----- Nomes de channel que não pode ser usado if param == "" or param == " " then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Diga o nome da channel que você quer") and false end if param == "on" or param == "off" then return setStatusTv(cid, param) end for i = 1, #bloqued do str = "Nomes não podem ser ultlizados" str = ""..str.."\n"..bloqued[i].."" if param == bloqued[i] then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este nome não pode ser ultilizado porque e um comando do sistema") and false end end if #param <= 4 and #param >= 10 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O nome da sua channel deve ser maior que 4 caracteres e menor que 10 caracters") and false end if getPlayerItemCount(cid, item) < 1 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de um "..getItemNameById(item).."") and false end if getChannelPlayer(cid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você ja tem uma channel") and false end createTv(cid, param) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Parabéns sua channel "..param.." foi criada") return true endVá em talkactions e crie um arquivo lua chamado de channel e coloque isto:
Vá em talkactions.xml e coloque estas tags:
Vá em creaturescripts e crie um arquivo lua chamado tv e coloque isto:
function onLogout(cid) if getChannelPlayer(cid) then local tv = db.getResult("SELECT * FROM `tv` WHERE `player` = '".. getPlayerGUID(cid) .."';") local channel = tv:getDataString("name") db.executeQuery("UPDATE `tv` SET `conec` = 0 WHERE `player` = "..getPlayerGUID(cid)) for i =1, #getPlayersOnline() do if getWatchingNameChannel(getPlayersOnline()[i]) == channel and getPlayersOnline()[i] ~= cid then exitChannel(getPlayersOnline()[i]) doPlayerSendTextMessage(getPlayersOnline()[i], MESSAGE_INFO_DESCR, "A channel foi desligada") end end doPlayerSendTextMessage(getPlayersOnline()[i], MESSAGE_INFO_DESCR, "Sua channel foi desativado ao você logar religue dizendo /tv on") return true end if getWatchingNameChannel(cid) ~= -1 then exitChannel(cid) return true end return true end function onAttack(cid, target) if getWatchingNameChannel(cid) ~= 1 then return false end return true endRegistre o evento colocando isto antes do ultimo return true:
Coloque esta tags em creaturescripts.xml:
Configurações
Midia:
Ajude o tv system dizendo ideias e bugs para o sistema.
Estarei optimizando o sistema e retirandos bugs.
Editado Fevereiro 1 por caotic