-
Total de itens
1599 -
Registro em
-
Última visita
-
Dias Ganhos
7
Tudo que caotic postou
-
Ola galera xtibiana!!! O summon system e um sistema de sumonar sistema com algumas novidades. A configuração fica dentro de arquivo xml ficando mais fácil e pratico de modificar. Para sumonar diga /sum(nome do monstro) Para ver a lista de sumons /sumons Então lets go. Dentro de sua pasta "Data" crie um nova pasta chamado de sumon. Depois dentro da pasta sumon crie um novo arquivo XML e coloque isto dentro: <monster name="Demon" mana="3000" level="300" item="2323" health="100" />< <monster name="Bug" mana="2" level="2" item="0" health="0" />< <monster name="Hydra" mana="2000" level="50" item="2323" health="0" />< Esta e minha configuração se quiser pode alterar. Depois vá em talkactions e crie um arquivo lua chamado de sumon e coloque isto: function onSay(cid, words, param, channel) function getSumonInFile() local x = {} local events = io.open("data/sumon/sumon.xml", "r") for i in events:read("*a"):gmatch('<monster name="(.-)" ') do table.insert(x, i) end return x end local function getExistSumonInFile(monster) for i = 1, #getSumonInFile() do if monster == getSumonInFile()[i] then return true end end return false end function getSumonRequiresInFile(monster, attr) local x = {} local events = io.open("data/sumon/sumon.xml", "r") for i in events:read("*a"):gmatch('<monster name="'..monster..'" (.-)/') do local req = tonumber(i:match(''..attr..'="(.-)" ')) table.insert(x, req) end return x[1] or 0 end local mana,level,item,health = getSumonRequiresInFile(param, "mana"),getSumonRequiresInFile(param, "level"),getSumonRequiresInFile(param, "item"),getSumonRequiresInFile(param, "health") local x = {"Vá "..param.." e derrote estes malditos","Seja bem vindo "..param.."","Váaaaa "..param.."","Eae "..param.." esta pronto?!","Vaii "..param.." você e realmente forte"} if param == "" or not param or param == " " then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Precisa de dizer o nome do monsto") and false end if not getExistSumonInFile(param) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este monstro não pode ser sumado") end if getCreatureMana(cid) <= mana then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..mana.."de mana para sumonar") and false end if getPlayerLevel(cid) <= level then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..level.." de level para summonar") and false end if getPlayerItemCount(cid, item) < 0 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem o item "..item.." para summonar") and false end if getCreatureHealth(cid) <= health then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não "..health.."de health para summonar") and false end doSummonMonster(cid, param) doCreatureAddHealth(cid, -health) doCreatureAddMana(cid, -mana) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, x[math.random(1, #x)]) return true end Agora de novo em talkactions crie um arquivo lua chamado de sumons e coloque isto: function onSay(cid, words, param, channel) function getSumonInFile() local x = {} local events = io.open("data/sumon/sumon.xml", "r") for i in events:read("*a"):gmatch('<monster name="(.-)" ') do table.insert(x, i) end return x end function getSumonRequiresInFile(monster, attr) local x = {} local events = io.open("data/sumon/sumon.xml", "r") for i in events:read("*a"):gmatch('<monster name="'..monster..'" (.-)/') do local req = tonumber(i:match(''..attr..'="(.-)" ')) table.insert(x, req) end return x[1] or 0 end str = "" for i = 1, #getSumonInFile() do local sum = getSumonInFile()[i] local mana,level,item,health = getSumonRequiresInFile(sum, "mana"),getSumonRequiresInFile(sum, "level"),getSumonRequiresInFile(sum, "item"),getSumonRequiresInFile(sum, "health") str = ""..str.."\n"..getSumonInFile()[i].." Level - "..level.." health - "..health.." mana - "..mana.."" end doPlayerPopupFYI(cid, str) return true end E prontinho vou ensinar a configuração no seu arquivo xml:
- 8 respostas
-
- sumons system
- pet system
- (e 3 mais)
-
Boa boa. Vou testar aki e ve como funciona. Parabéns.
-
eu também não concordo nem discordo, muito pelo contrário
tópico respondeu ao Prezyoso de caotic em Lixeira Pública
Gay gay -
Vou mover para a área de programação. Movido
-
Tem certeza que segui o procedimento certo. Crie um arquivo de TEXTO chamado de mensagens na pasta data do seu otserv
- 8 respostas
-
- mensagens off
- sistema de mensagens off
- (e 5 mais)
-
Ola galera xtibiana O radio system eu ja tinha feito numa versão "beta" mais estava muito limitado. O link do sistema beta http://www.xtibia.com/forum/topic/190386-radio-sytem/ Então resolvi fazer uma versão superior O radio sytem e um sistema de (channel ou estações). Um player cria uma nova radio e depois outro player "sincroniza" a partir disso o dono da radio pode mandar mensagens a todos os participantes Para procurar uma radio e exibido uma janela que monstra o (Id da radio, dono da radio, radio esta online ou offline) Vamos aos códigos: function getRadPlayer(cid) local rad = db.getResult("SELECT `rad` FROM `players` WHERE `id` = "..getPlayerGUID(cid)) return rad:getID() ~= -1 and rad:getDataInt("rad") or false end function setPlayerRad(cid, rad) db.executeQuery("UPDATE `players` SET `rad` = "..rad.." WHERE `id` = "..getPlayerGUID(cid)) end function createNewRad(cid) db.executeQuery("INSERT INTO `rad` VALUES (".. getPlayerGUID(cid) ..", ".. 1 ..")") db.executeQuery("UPDATE `players` SET `rad` = "..getPlayerGUID(cid).." WHERE `id` = "..getPlayerGUID(cid)) end function getOwnerIdRad(cid) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. getPlayerGUID(cid) ..";") return rad:getID() ~= -1 and rad:getDataInt("id") or false end function getRadMens(cid) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. getPlayerGUID(cid) ..";") return rad:getID() ~= -1 and rad:getDataInt("mens") or 0 end function getPlayerOwnerRad(cid) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. getPlayerGUID(cid) ..";") return rad:getID() ~= -1 and true or false end function getExistRad(id) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. id ..";") return rad:getID() ~= -1 and true or false end function sendTextForRad(cid, text) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. getPlayerGUID(cid) ..";") local mens = getRadMens(cid)+1 for i =1, #getPlayersOnline() do if getRadPlayer(getPlayersOnline()[i]) == getPlayerGUID(cid) then doPlayerSendTextMessage(getPlayersOnline()[i], MESSAGE_INFO_DESCR, text) db.executeQuery("UPDATE `rad` SET `mens` = "..mens.." WHERE `id` = "..getPlayerGUID(cid)) end end end Vá em talkactions e crie um arquivo lua chamado de rad 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, "Coloque o id da radio para participar dela") and false end if getOwnerIdRad(cid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode participar de outras radios porque você ja tem uma") and false end if not getExistRad(tonumber(t[1])) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Esta radio não existe") and false end setPlayerRad(cid, tonumber(t[1])) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você esta sincronizado na radio "..t[1].."") return true end Continue em talkactions e crie um arquivo lua chamado de list e coloque isto: function onSay(cid, words, param, channel) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` ORDER BY `mens`") str = "Radio Ons:\n\n" if rad:getID() == -1 then doShowTextDialog(cid, 1387, "Não ha radio online") return true end while true do local id = rad:getDataInt("id") local name = getPlayerByNameWildcard(getPlayerNameByGUID(id)) and getPlayerNameByGUID(id) or "offline" str = str .. id .. " - Dono da Radio - ("..name..")\n\n" if not rad:next() then doShowTextDialog(cid, 1397, str) break end end return true end Depois em talkactions de novo crie um arquivo lua chamado de createrad e coloque isto: function onSay(cid, words, param, channel) local price = 22220 -- Preço para criar a radio (detalhe coloque um preço bem alto para o otserv não ficar com muitas radios) if getPlayerMoney(cid) <= price then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem dinheiro suficiente para criar uma radio") and false end if getPlayerOwnerRad(cid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você ja tem uma radio ID "..getOwnerIdRad(cid).."") and false end createNewRad(cid) doPlayerRemoveMoney(cid, price) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua radio foi criado seu ID é "..getOwnerIdRad(cid).." convide suas amigos para participar dela") return true end Terminado na mesma pasta(talkactions) crie um arquivo lua chamado de txt 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, "Coloca a mensagem que deseja enviar para os participantes da sua radio") and false end if not getPlayerOwnerRad(cid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem radio") and false end if #param < 4 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua mensagem deve ser maior") and false end sendTextForRad(cid, "("..getOwnerIdRad(cid)..") "..getPlayerName(cid).." - "..t[1].." ") return true end Coloque esta tags em talkactions.xml: Para usar e simples:
- 1 resposta
-
- radio
- radio em otserv
- (e 4 mais)
-
retireCharactersInArrayString(string, array)
tópico respondeu ao caotic de caotic em Mods, funções e outros
Ja que ele repete todas as caracteres da string ele acaba retirando o "O". -
Eu curti a função nextHorario. Teve que ate separar os valores do ":" e depois transformar tudo em numero para depois comparar valores numa tabela. E isto ai slicer gostei
-
E isto ai slicer. Foda-se o processamento da maquina e viva o pog
-
Boa smix. E uma boa usar módulos. Seria interessante retornar booleanos para ficar mais fácil de manipular.
-
retireCharactersInArrayString(string, array)
tópico respondeu ao caotic de caotic em Mods, funções e outros
Ja sabia... Eu fiz ela so para desafiar o sub. Ate mais. -
retireCharactersInArrayString(string, array)
um tópico no fórum postou caotic Mods, funções e outros
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" -
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
-
Entendo. Não vejo a necessidade ser global mais enfim. Eu só coloquei a função em português para melhor entendimento.
-
creatureevent Trainer Off Sytem Beta By Caotic
tópico respondeu ao caotic de caotic em Globalevents e Spells
Opa e mesmo. O tempo estava errado. Pronto ja foi concertado- 18 respostas
-
- trainer off
- trainer off by caotic
- (e 6 mais)
-
Humm não percebi Sorte que desenvolvi duas versões. Então foi um pequeno #Fail
-
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".
-
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)
- 1 resposta
-
- acessando arquivos xml
- tutorial xml
- (e 5 mais)
-
Qual é a coisa mais importante em um código? E por que é a elegância?
um tópico no fórum respondeu caotic em Lixeira Pública
Sem comentarios. Tutorial Aprovado -
pedido Galera me ajuda , 2 scripts meus estao entrando em conflito
pergunta respondeu ao tonynamoral de caotic em Scripts
Tópico movido para a seção de dúvidas e pedidos resolvidos. -
Este script já existe. http://www.xtibia.com/forum/topic/202276-vocation-outfit-v10/
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.