Ir para conteúdo

caotic

Infante
  • Total de itens

    1599
  • Registro em

  • Última visita

  • Dias Ganhos

    7

Tudo que caotic postou

  1. Eu estava querendo fazer alguma gambiarra para passar o tempo. E tive a ideia de fazer esta função. Ela retira caracteres de uma string para usa - la basta colocar os caracteres que deseja retirar numa array e chamar a função. local function retirecharacterString(string, value) k = 1 while k < #string do local str = string.sub(stg or string, k, k) if str == tostring(value) then local sub = string.sub(stg or string, 0, k-1) local strsub = string.sub(stg or string, k+1, #string) stg = ""..sub..""..strsub.."" k = k+1 end k = k+1 end return stg end function retireCharactersInArrayString(string, array) for i = 1,#array do x = "" x = x..retirecharacterString(string, array[i]) end return x end Se printar dessa maneira: print(retireCharactersInArrayString("GOD OF WAR", {"G", "O", "D", " "})) Vai aparecer "F WAR"
  2. Entendo. Não vejo a necessidade ser global mais enfim. Eu só coloquei a função em português para melhor entendimento. Se a função for usada só em um script, tudo bem ser local, mas se for uma função feita para ser usada em uma biblioteca, ela precisa ser global, ou então nada terá acesso à ela. Eheuhaueeh. Pensei que estava falando das variáveis locais. E verdade Se a função for usado em uma biblioteca ela não poderia ser acessado por causa do local. Eu deveria ter retirado o local das funções. Ja concertei
  3. Entendo. Não vejo a necessidade ser global mais enfim. Eu só coloquei a função em português para melhor entendimento.
  4. Humm não percebi Sorte que desenvolvi duas versões. Então foi um pequeno #Fail
  5. caotic

    isPar(Number)

    Estava sem o que fazer e resolvi fazer esta função. Eu não sei para que você vai usar esta função em opentibia mais.... Resolvi fazer duas versões da função. Esta função e beem mais pesado mais e funcional. function isPar(number) local x = {1, 3, 5, 7 , 9} local number = tostring(number) local a = string.sub(number, #number) local a = tonumber(a) for i =1, #x do if a == x[i] then return false end end return true end Bem mais simples e também e funcional. function isPar(number) if number % 2 == 0 then return true end return false end if isPar(322343) then print("par") else print("impar") end No exemplo acima retornaria impar porque 322343 e "impar".
  6. Ola galerinha. Eu sempre percebi que usam muito o arquivo de texto para arquivo remotos. Mesmo que não apresenta muita diferença entre a manipulação do XML E TXT e interessante aprender a manipular os dois corretamente. O XML e mais usado para configurações e o arquivo de texto e mais usado para "guardar". Existe outros arquivos remotos como a própria extensão lua onde suas tables e funções podem ser acessadas remotamente. Um exemplo e sua pasta lib. A melhor formula de procurar valores em um arquivo xml e usando funções para manipulação de strings. Primeiro precisamos achar o arquivo xml. Vamos declarar um variável local com o diretório do arquivo. Aplicamos o modulo "r"(Obs: Existem outros módulos mais por enquanto utilizaremos este) local dir = io.open("data/banana/tangerina.xml", "r") Acessamos a pasta "banana" e abrimos arquivos tangerina.xml. O arquivo XML tinha salvo este texto. <fruta="Banana" quem gosta="Beeki"/> <fruta="Tangerina" quem gosta="Vodkart"/> <fruta="Uva" quem gosta="LuckOake"/> <fruta="Mamão" quem gosta="OneShot"/> <fruta="Bosta" quem gosta="Stigal"/> Então se consideramos a configuração "beeki gosta da fruta Banana". Então queremos ver em um script lua qual fruta gosta o beeki: for i in events:read("*a"):gmatch('fruta="(.-)" quem gosta="Beeki"') do Não se assuste irei explicar. O for serve para que ela se repita ou seja ela pode procurar outros valores(Se existir outros valores) O string.gmatch procuras as linhas. for i in events:read("*a"):gmatch('O QUE VEM ANTES DO QUE PROCURA(.-)O QUE VEM DEPOIS QUE VOCÊ PROCURA(Esta parte finaliza a busca)') do O sinal (.-) significa o valor que você quer procurar. Alguns exemplos: Quero todas as frutas no xml! for i in events:read("*a"):gmatch('fruta="(.-)"') do Quem gosta de tangerina? for i in events:read("*a"):gmatch('fruta="Tangerina" quem gosta = "(.-)"') do Quero os nomes das pessoas do xml! for i in events:read("*a"):gmatch('quem gosta="(.-)"') do Diquinhas(dicas): E protinho fim de tutorial. Não sou bom em organização de tópicos Obrigado aos usuários que foram acessados remotamente(Eu não pedi autorização)
  7. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  8. Este script já existe. http://www.xtibia.com/forum/topic/202276-vocation-outfit-v10/
  9. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  10. O xtibia não apoia o uso de bot. Por isso e proibido este tipo de pedido. Tópico Fechado
  11. caotic

    Script da Semana Voltou!

    Eai xtibianos? O SDS e um concurso que acontece semanalmente ele e uma votação dos scripts postados na semana. Mais por causa de motivos pessoais da equipe como os feriados(natal e virada do ano) ele teve quer dar uma parada. O LuckOake já adiantou o resultado Estaremos voltando o SDS e as semanas perdidas tentaremos colocar alguns scripts. Não se esqueça de conferir a volta do SDS. Então prepare seu script e venha participar do SDS. Para ver as regras: http://www.xtibia.co...-atuais-do-sds/ Pontos do SDS: http://www.xtibia.co...910-pontos-sds/ Confira também o resultado do SDS #27: http://www.xtibia.co...sultado-sds-27/
  12. Ue porque se lanço uma varivel x. E depois seto o valor 0. function onLogin(cid) if getPlayerStorageValue(cid, 12345) == 1 then local x = exhaustion.get(cid, 12346) if x then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The exhaustion is in "..x.." seconds.") end end return false end
  13. caotic

    Dúvidas com funções

    local x = {"oneshot"} table.insert(x, "string da table") for i = 1, #x do print(x[i]) Retornaria. "OneShot" "String da table" print(string.len("esta")) printava 4. Se preferir também pode ser usado desta maneira. print(#"esta") printava 4 setPlayerStorageValue(cid, 23232, os.time() + 100) Seta o valor de tempo na storage 23232.
  14. caotic

    Dúvidas com funções

    os.clock -- Não a conheço direito mais ela retorna o valor do tempo da cpu. os.time --- Esta função e usada para manipular tempo muito usada para exhaustion numa storage table.insert --- Coloca um novo valor a uma tabela string.len - Retorna o tamanho da string e mesma coisa de #string
  15. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) local pos = {x=753, y=1159, z=7} -- Local da hunt local posreturn = {x=796, y=1155, z=2} -- Posiçao onde o player sera teleportado quando acabar o tempo local money = 10000 --- Quanto de dinheiro sera removido config = { time = 6, ---Tempo que ele vai ficar na hunt sabendo que cada numeral equivale a um minuto----- msg = "Você não é um ninja rank C" --- Mensagem que irá aparecer se ele não tiver a storage } local str = { {st = 2124, value = 1}, --- St e o numero da storage e value e o valor da storage {st = 2124, value = 2}, {st = 2124, value = 3} } function doReturnPos() doTeleportThing(cid, posreturn) setGlobalStorageValue(24688, 0) setGlobalStorageValue(24686, none) setPlayerStorageValue(cid, 28680, 0) end if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'chuunin') then for i = 1, #str do if getPlayerStorageValue(cid, str[i].st) ~= str[i].value then doPlayerSendTextMessage(cid,22, config.msg) return true end end if getGlobalStorageValue(24688) == 1 then doPlayerSendTextMessage(cid,22,"O player "..getGlobalStorageValue(24686).." esta fazendo o teste") return true end if not doPlayerRemoveMoney(cid, money) then doPlayerSendTextMessage(cid,22,""..getPlayerName(cid).." precisa de "..money.." para fazer o chuunin teste") return true end doPlayerRemoveMoney(cid, money) doPlayerSendTextMessage(cid,22,"Obrigado "..getPlayerName(cid).." foi teleportado.") doTeleportThing(cid, pos) setGlobalStorageValue(24688, 1) setGlobalStorageValue(24686, getPlayerName(cid)) setPlayerStorageValue(cid, 28680, 1) addEvent(doReturnPos, config.time*60*1000) else selfSay('Diga chuunin', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  16. Legal legal legal. Tópico Closed
  17. Eehauhaueheuehae Me da o numero 2.
  18. Ola galerinha xtibiana. Vou disponibilizar um sistema de mensagens offline de modo simples e pratica. Não e necessário a utilização de database basta um arquivo de texto. Para mandar uma mensagem e so dizer /msg(nome do player, mensagem). E quando o player logar ele vai ter que abrir uma channel de mensagens off e ele receberá as mensagens. Vamos a instalação. Crie um arquivo de TEXTO chamado de mensagens na pasta data do seu otserv Agora vá em lib e crie um arquivo lua chamado de mensagens: function doSendMsg(cid, receptor, msg) local file = io.open("./mensagens.txt", "a") file:write("\n Player "..tostring(receptor).." Mensagem: "..tostring(msg).." por "..getCreatureName(cid).."End") file:close() end function getPlayerMgs(name) local x = {} local msg = io.open("./mensagens.txt", "r") for i in msg:read("*a"):gmatch("Player "..name.." Mensagem: (.-)End") do table.insert(x, tostring(i)) io.close() end return x or 0 end Vá em data/xml e abra o arquivo channel.xml. E coloque isto: Vá em talkactions e crie um arquivo lua chamado de mens e coloque isto: function onSay(cid, words, param, channel) local t = string.explode(param, ",") if not t[1] then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você deve dizer o nome do player /msg(nome do player, mensagem)") and false end if not t[2] then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você deve escrever a mensagem /msg(nome do player, mensagem)") and false end if #t[2] <= 4 then return doPlayerSendCancel(cid, "Você deve dizer a msg com mais de 4 caracteres /msg(nome do player, mensagem)") and false end if not playerExists(t[1]) then return doPlayerSendCancel(cid, "Este player não existe") and false end local pid = getPlayerByNameWildcard(receptor) if pid then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua mensagem não foi enviado porque este player esta online") and false end doSendMsg(cid, t[1], t[2]) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua mensagem foi enviado com sucesso para "..t[1].."") return true end Vá em talkactions.xml e coloque esta tag: Vá em creaturescripts e crie um arquivo lua chamado de mens e coloque este código: function onLogin(cid) local mens = getPlayerMgs(getCreatureName(cid)) local str = "Você tem "..#mens.." mensagens olhe na channel de Mensagens Off" if #mens >= 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, str) return true end return true end Vá em creaturescripts e crie um arquivo lua chamado de mensagens e coloque isto: function onJoinChannel(cid, channelId) if channelId == 68 then local mens = getPlayerMgs(getCreatureName(cid)) for i = 1, #mens do doShowTextDialog(cid, 1397, mens[i]) end return true end return true end Registre o evento em login.lua colocando isto antes do ultimo return true: Vá em creaturescripts e coloque esta tag em creaturescripts.xml: E isto ae pessoal. Agora quando o player logar ele recebe a mensagem e basta ele abrir a channel e ir clikando "Ok" nas paginas do dialogo
  19. Biblioteca interessante. Usar orientação a objetos deixa o codigo bem mais clen Vou dar uma olhada
  20. local points = 60 --- Modifique aki a quantidade de points function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if getAccountPoints(cid) < points then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Para desbanir necessita ter "..points.."") return true end local account, tmp = getAccountIdByName(param), true if(account == 0) then account = getAccountIdByAccount(param) if(account == 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player or account '" .. param .. "' does not exists.") return true end tmp = false end local ban = getBanData(account, BAN_ACCOUNT) if(ban and doRemoveAccountBanishment(account)) then local name = param if(tmp) then name = account end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, name .. " has been " .. (ban.expires == -1 and "undeleted" or "unbanned") .. ".") end if(not tmp) then return true end tmp = getIpByName(param) if(isIpBanished(tmp) and doRemoveIpBanishment(tmp)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "IP Banishment on " .. doConvertIntegerToIp(ip) .. " has been lifted.") end local guid = getPlayerGUIDByName(param, true) if(guid == nil) then return true end ban = getBanData(guid, BAN_PLAYER, PLAYERBAN_LOCK) if(ban and doRemovePlayerBanishment(guid, PLAYERBAN_LOCK)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Namelock from " .. param .. " has been removed.") end ban = getBanData(guid, BAN_PLAYER, PLAYERBAN_BANISHMENT) if(ban and doRemovePlayerBanishment(guid, PLAYERBAN_BANISHMENT)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param .. " has been " .. (ban.expires == -1 and "undeleted" or "unbanned") .. ".") end doAccountRemovePoints(cid, points) return true end
  21. caotic

    FELIZ ANO NOVO!

    Feliz ano novo. 2013 promete grandes mudanças.
  22. Problema resolvido 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
  • Quem Está Navegando   0 membros estão online

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