Ir para conteúdo

caotic

Infante
  • Total de itens

    1599
  • Registro em

  • Última visita

  • Dias Ganhos

    7

Tudo que caotic postou

  1. Não gosto de identar. Como eu disse não vejo necessidade nem e preguissa.
  2. Claro que não conseguira ajuda. Você postou em área incorreta. Estarei movendo mais espero que leia as regras.
  3. local itens = { ["staff fire"] = {staff = 2334}, ------ Primeiro e o nome da nova staff e depois o id da staff que ele precisa ["staff ice"] = {staff = 2336}, } function onSay(cid, words, param, channel) if param == " " or param == "" then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Diga o nome da staff que você quer") and false end local item = itens[param] if not item then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não existe esta staff") and false end local item = getItemIdByName(item) if getPlayerItemCount(cid, itens[param].staff) < 1 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..getItemNameById(itens[param].staff).."") and false end doPlayerRemoveItem(cid, item.staff) doPlayerAddItem(cid, item) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você obteve a nova staff") return true end
  4. No meu ponto de vista o fórum esta perfeito. Só mudaria a forma que a equipe trata os membros(Estou decepcionado nesta questão) Mais concursos para os novinhos(Para a entrada na equipe). Daria mais "importância" ao conteúdos postado no fórum. E claro atualizaria o fórum(Que faz um tempinho que estou cobrando isto)
  5. Eita. Os cristãos ligando para encher a pança de dinheiro da band principalmente para o datena. Dinheiro e foda msn ;D.
  6. E chato fazer sem c++ Mais ta ai o exemplo que pode ser melhorado. Afinal. Da para fazer muita coisa com Lua.
  7. 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.
  8. 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
  9. 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.
  10. . Esqueci da lib no tópico me desculpe. Foi adicionado. Estarei fazendo o video
  11. 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: CREATE TABLE "tv" ( "name" Text NOT NULL, "player" INT NOT NULL, "conec" INT NOT NULL ) 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 end Vá 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 end Vá em talkactions e crie um arquivo lua chamado de channel e coloque isto: function onSay(cid, words, param, channel) if param == "" or param == " " then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Diga /channel(nome da channel para se conectar)\n/channel(list) Lista das channels\n/channel(sair para sair da channel)") and false end if param ~= "list" and param ~= "sair" then if not isTv(param) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não existe esta channel") and false end if not (getTilePzInfo(getCreaturePosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você so pode entrar em uma channel quando estiver em pz") return true end if getChannelPlayer(cid) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode entrar uma tv porque você ja tem uma") return true end if getWatchingNameChannel(cid) ~= -1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você esta conectado a uma channel") return true end if not getConectTv(param) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Esta channel esta desativada") and false end enterInTv(cid, param) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você esta assitindo a channel "..param.."") return true end if param == "list" then return doShowListChannel(cid) end if param == "sair" then if getChannelPlayer(cid) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode sair de sua propria tv use o comando /tv off para desativar sua channel") return true end if getWatchingNameChannel(cid) == -1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não esta conectado a uma channel") return true end exitChannel(cid) return true end return true end 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 end Registre 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.
  12. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  13. Construindo o TV system em Lua
  14. Ola galera do xtibia. function onSay(cid, words, param, channel) function getTalksByGroup(cid) local events = io.open("data/talkactions/talkactions.xml", "r") str = "" for i in events:read("*a"):gmatch('<talkaction(.-)/>') do local acess = tonumber(i:match('access="(.-)"')) local talk = tostring(i:match('words="(.-)"')) local acess = acess or 0 if not string.find(tostring(i), "access") then str = ""..str.."\n"..talk.."- Player" elseif getPlayerGroupId(cid) >= acess then str = ""..str.."\n"..talk.." - "..acess.."" end end return str end function getSpellVocation(cid) local events = io.open("data/spells/spells.xml", "r") str = " >---Spell Vocations "..getPlayerVocation(cid).."---< " for i in events:read("*a"):gmatch('<instant(.-)</instant>') do local name = tostring(i:match('name="(.-)"')) local level = tostring(i:match('lvl="(.-)"')) local words = tostring(i:match('words="(.-)"')) if getPlayerGroupId(cid) >= 5 or getPlayerVocation(cid) == 0 then str = ""..str.."\n"..name.."-"..level.."-"..words.."" elseif string.find(i, '<vocation id="'..getPlayerVocation(cid)..'"/>') then str = ""..str.."\n"..name.."-"..level.."-"..words.."" end end return str end if param == "" or not param then return doPlayerPopupFYI(cid, "Diga se quer ver a sua lista de spell(/commands spells) ou comandos(/commands talks)") end if param == "spell" or param == "spells" then doShowTextDialog(cid, 1949, getSpellVocation(cid)) return true end if param == "talk" or param == "talks" then doShowTextDialog(cid, 1949, getTalksByGroup(cid)) return true end return true end Agora vá em talkactions.xml e coloque esta tag: <talkaction words="!commands;/commands" event="script" value="commands.lua"/> List talks/spells e um sistema completo que monstra uma lista que monstra a lista de talks ou a lista de spells. Na lista de spell e exibido todas as spells da vocação do player e com informações do level da spell,nome da spell e words da spell. Na lista de talkactions e exibido todas as talks do grupo do player. Para ver a lista de cada um e só dizer. /commands spells --Lista de spells /commands talks --- Lista de talks Agora vamos ao sistema. Crie um arquivo lua chamado de commands em talkactions e coloque isto:
  15. E como foi dito o poger e associado a quantidade de linhas. Mais nunca disse que a quantidade de linhas tem relação com a qualidade do script. Do mais. Eu não vejo as gambiarras como monstro. Desculpe, eu interpretei mal. Realmente, as "gambiarras" geralmente ocupam mais linhas do que uma solução que seria naturalmente mais simples. E quanto à ser um monstro, É o que eu falei: É um mal necessário. Se existe uma solução mais simples e limpa, por que fazer de forma absurda? Para ganhar a alcunha de "rei do pog"? Para obscurecer o código? Usando uma analogia bem ridícula: se você pode colocar o quadro na parede com um prego, por que usar durepoxy? Existem casos onde gambiarras são sim necessárias. Talvez porque não exista outra solução pro problema. Ou talvez seja um mÉtodo mais rápido de executar determinada rotina. Para estes casos eu concordo com você, mas o programador tem que ter certeza absoluta de que a solução É segura, eficiente, e a melhor possível para o problema. Para isso você precisa saber com o que está lidando, conhecer muito bem suas ferramentas (bibliotecas e linguagem), e mesmo assim deixar um comentário explicando como a magia negra funciona e por que ela foi necessária. Todo mundo faz gambiarra um dia, apenas tenha certeza de que está fazendo a coisa certa, e não fazendo só por graça. O trabalho dos programadores não É apenas encontrar soluções, mas sim encontrar as melhores soluções. O motivo do meu pânico em relação ao assunto É que muitos programadores incentivam os iniciantes a fazer gambiarra como se fosse normal, e isso continua com a pessoa por muito tempo, atÉ que ela atinja maturidade suficiente pra diferenciar uma solução boa de uma solução ruim. Me chame de egoísta se quiser, mas eu não quero mais ver novatos fazendo magia negra sem nem se dar o trabalho de procurar uma solução mais simples. São essas pessoas que fazem códigos com 9 loops aninhados e dificílimos de entender. Outra coisa: do jeito que eu falei talvez tenha parecido que eu estou depreciando seu trabalho. Se você entendeu isso, você tem minhas sinceras desculpas, não foi minha intenção. Eu apenas não quero que quem está começando a programar leia o tópico e seja encorajado a fazer gambiarra em todo lugar do código. Programação não É isso. Um bom programador faz um código limpo, legível e rápido, e gambiarra É justamente o contrário desses três adjetivos. Para provar que eu tambÉm faço absurdos e não estou só falando da boca pra fora, aqui está uma gambiarra que eu fiz não faz muito tempo: module("space", package.seeall) _T = "space" local __type__ = type function _G.type(value) if __type__(value) == "table" and value._T then return value._T end return __type__(value) end Mais como foi dito. Você "pelo que parece" e muito organizado; Na verdade não tenho organização nenhuma e isto e realmente um problema. Tanto que já perdi muita coisa por falta de organização. Depende muito do programador. [i]Tudo depende da pessoa. Se a pessoa gostar do que faz não há nada que impeça usar gambiarras.[/i] [i]Um programador acima de tudo deve gostar do que ele faz.[/i]
  16. E como foi dito o poger e associado a quantidade de linhas. Mais nunca disse que a quantidade de linhas tem relação com a qualidade do script. Do mais. Eu não vejo as gambiarras como monstro.
  17. Ola pessoal xtibiano. Neste tutorial estarei abordando as famosas gambiarras ou "pogs". Tomara que gostem do tuto e que decidam o sua posição em relação a gambiarras. Organizei o tutorial por perguntas mais "importante" em relação ao poger. Todas as perguntas estão organizadas e bem estruturadas. Mais o que é Gambiarras? Gambiarras são novas formulas em programação para se realizar uma ação. Normalmente as "gambiarras" são associadas a lentidão e mal uso da linguagem mais isto irá depender da sua estrutura! Normalmente um programador busca a formula mais convencional,simples,rápida é funcional para se realizar um script mais os programadores "gambiarizadores" tentem de inúmeras maneiras possíveis mesmo comprometendo a performance de seu script . Na hora da construção ele utiliza estruturas mais "abusivas". Um exemplo de gambiarra são a reconstrução de funções nativas da linguagem normalmente as funções recriadas saem com sua "performance" prejudicada. Todo programador utiliza gambiarras? Normalmente um programador adquiri esta "sede" de gambiarras ou seja nem todo programador gosta dessas fantásticas ideias. Normalmente gambiarras são associadas a falta de organização é isto e realmente verdade. Um gambiarrador normalmente tem menos organização em seus scripts ignorando (nome de variáveis,espaçamento e etc...) Necessita ter mais conhecimento na linguagem para usar as gambiarras? Não necessita ter mais conhecimento NECESSITA TER MAIS CRIATIVIDADE. Como foi dito o gambiarrador utiliza estruturas "abusivas" ou seja que consomem mais processamento da plataforma. Loops e Tables com múltiplos valores são muitos comuns em scripts com gambiarras. Existe a possibilidade de ter uma gambiarra amigável com o processamento da maquina? Claro. A maioria das gambiarras consome uma boa quantidade de processamento da maquinas mais não significa que todas as gambiarras vão utilizar a memoria de forma abusiva. Lembrando que gambiarras são apenas formulas mais inovadoras não as confundam. Numero de linhas de um código e associado a gambiarras? Sim. Normalmente códigos com gambiarras são perfeitamente visíveis que consomem mais linhas. Usar mais inovação também gasta linhas(hehe). Afinal de tudo vale a pena virar um poger? Tudo depende da pessoa. Se a pessoa gostar do que faz não há nada que impeça usar gambiarras. Um programador acima de tudo deve gostar do que ele faz. Tomarás que tenham respondido suas perguntas sobre as gambiarras. E isto ae pessoal. OUVIU LUCKOAKE POG NÃO E RUIM.
  18. você está atribuindo o uid = 0 sempre, então nao é desnecessario esse uid? (só por curiosidade mesmo) e novamente, parabens! rep+ merecido! Eu falei com o luck sobre isto. Ele falo que erá para ficar mais bonito.
  19. Ola pessoal xtibiano. O Info Monster e um sistema que permite ver informações importantes de um monstro para o player. Ele exibe vários atribbutos do monstro como por exemplo os ataques do monstro. Assim o player antes de caçar um monstro ele irá analisar se ele poderá derrotar o monstro. Além disso se o player errar o nome do monstro a talk exibe os nomes de todos os monstro do seu otserv assim o player podera identificar o monstro que ele procura. Então vamos a talkactions. Crie um arquivo lua chamado de info em talkactions e coloque isto: function getDirMonsterByNameMonster(name) t = {} local monster = io.open("data/monster/monsters.xml", "r") for i in monster:read("*a"):gmatch('<monster name="'..tostring(name)..'" file="(.-)"/>') do table.insert(t, tostring(i)) end return t[1] or 0 end function getMonsterAttacks(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('attack name="(.-)"') do str = ""..str.." - "..i.."" end return str end function getMonsterDefense(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('defense name="(.-)"') do str = ""..str.." - "..i.."" end return str end function getMonsterLootItens(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('id="(.-)"') do str = ""..str.." - "..i.."" end return str end function getMonsterVoices(name) local dir = "data/monster/"..getDirMonsterByNameMonster(name).."" local monster = io.open(""..dir.."", "r") str = "" for i in monster:read("*a"):gmatch('voice sentence="(.-)"') do str = ""..str.." - "..i.."" end return str end function getAllMonster() local str = "" local monster = io.open("data/monster/monsters.xml", "r") str = "Você digitou incorretamente o nome do monstro veja a lista de monstro\n" for i in monster:read("*a"):gmatch('<monster name="(.-)"') do str = ""..str.." - "..i.."" end return str end function getAttrMonster(name) return "Vida = "..getMonsterInfo(name).health.."\nExp = "..getMonsterInfo(name).experience.."\n" end function onSay(cid, words, param, channel) if param == "" or not param or param == " " then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa dizer o nome do monstro") return true end local name = param if (getMonsterInfo(param)) then doShowTextDialog(cid, 1397, "Info Monster "..name.."\n"..getAttrMonster(name).."\nAttacks = "..getMonsterAttacks(name).."\n\nDefense = "..getMonsterDefense(name).."\n\nVoices = "..getMonsterVoices(name).."\n\nLoots = "..getMonsterLootItens(name).."") else doShowTextDialog(cid, 1397, getAllMonster()) return true end return true end Agora vá em talkactions.xml e coloque isto: <talkaction words="/infom" event="script" value="info.lua"/>
  20. E incrível o sistema Você manipula a criatura de um jeito espetacular salvando a criatura com o pet:setit A única coisa chata seria as storages. Mais ta incrível Parabéns.
  21. Antes de configurar o script. Eu recomendo algumas dicas.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...