Líderes
-
MaXwEllDeN
HéroiPontos1185Total de itens -
-
Gabriel10101
MembroPontos95Total de itens -
principe sharingan
MembroPontos340Total de itens
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 05/09/13 em todas áreas
-
Castle War 2.0
Castle War 2.0
DeathRocks reagiu a Gabriel10101 por uma resposta no tópico
1 pontoOlá Pessoal do TK olha eu aqui di novo Então,meu problema agora é com um script de Castle War. script: ps: esse guarda é configurado para não atacar os ‘donos’ do castelo! :fail: Instalação Actions Va na pasta Data/action/action.xml e adicione isto: Quote <action actionid="9999" event="script" value="castlewar1.lua"/> <action actionid="9998" event="script" value="castledoor1.lua"/> <action actionid="8888" event="script" value="castlewar2.lua"/> <action actionid="8887" event="script" value="castledoor2.lua"/> Agora vá em Data/actions/scripts , crie esses 4 arquivos abaixo: castlewar1.lua ----------------------------------- ---------SCRIPT por PC98------------ NAO REMOVA OS CREDITOS ----------------------------------- function onUse(cid, item, frompos, item2, topos) ------------------ Inicio das Config ------------ local castle_one_name = "Ratim Bum" -- Nome do castelo 1 local storages = {154154,54321,123123} -- Storages ( se vc eh iniciante, deixe como está...) -------PREMIOs I N D I V I D U A L --------- local premio_por_vezes = 1 -- Premio por vezes de conquista de castelo. (1) = Ativo (0) = Desativa. local premio_vezes = 13 -- Caso ativo, a quantidade de conquista que o player tem, para ganhar PREMIO. local premio = 2472 -- ID do Premio local premio_cont = 1 -- Quantidade do Premio local premio_reset = 1 -- Resetar o contador do premio depois que atingir a meta?? (1) = SIM (0) = NAO -------FIM PREMIOs I N D I V I D U A L --------- ----------------- FIM DAS CONFIG ----------------- local sto_ativ = getGlobalStorageValue(storages[2]) position = getCreaturePosition(cid) if isPlayerGuild(cid) == TRUE then if sto_ativ == 1 or sto_ativ == -1 then guildname = getPlayerGuildName(cid) guild = getPlayerGuildId(cid) guild_sto = getGlobalStorageValue(storages[3]) if guild ~= guild_sto then setPlayerStorageValue(cid,guild_sto,guild) if getPlayerStorageValue(cid,storages[1]) == -1 then setPlayerStorageValue(cid,storages[1],0) end sto_vezes = getPlayerStorageValue(cid,storages[1]) setGlobalStorageValue(storages[3],getPlayerGuildId(cid)) setPlayerStorageValue(cid,storages[1], sto_vezes + 1) sto_vezes_total = getPlayerStorageValue(cid,storages[1]) doBroadcastMessage("O(a) "..getCreatureName(cid).." acabou de conquistar o castelo "..castle_one_name.." para a guild \""..guildname.."\" pela "..sto_vezes_total.."ª vez(s).", 22) doSendMagicEffect(position, 39) if premio_por_vezes == 1 then if getPlayerStorageValue(cid,storages[1]) == premio_vezes then if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doBroadcastMessage("O "..getCreatureName(cid).." ganhou uma(o) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!", 21) doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") ----------------------------------------------- -- if premio_reset == 1 then -- setPlayerStorageValue(cid,storages[1],0) -- Resetar a contagem end -- ----------------------------------------------- -- else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Vamos verificar novamente em 10 segundos!") addEvent(additem,10000,cid,premio,premio_cont,premio_reset) end end end else doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!") doSendMagicEffect(position, 2) end else doPlayerSendCancel(cid,"O sistema está desativado") end else doPlayerSendCancel(cid,"É nescessario ter guild para dominar o castelo!") doSendMagicEffect(position, 2) end end ------------------------- por pc98 function additem(cid,premio,premio_cont,premio_reset) if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") if premio_reset == 1 then setPlayerStorageValue(cid,storages[1],0) end stopEvent(additem) else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Verificando novamente em 10 segundos!") addEvent(additem,10000,cid) end end ------------------------- por pc98 function isPlayerGuild(cid) if getPlayerGuildName(cid) ~= "" then return TRUE else return FALSE end end castlewar2.lua ----------------------------------- ---------SCRIPT por PC98------------ NAO REMOVA OS CREDITOS ----------------------------------- function onUse(cid, item, frompos, item2, topos) ------------------ Inicio das Config ------------ local castle_two_name = "do Dracula" -- Nome do castelo 2 local storages = {154154,54321,321321} -- Storages ( se vc eh iniciante, deixe como está...) -------PREMIOs I N D I V I D U A L --------- local premio_por_vezes = 1 -- Premio por vezes de conquista de castelo. (1) = Ativo (0) = Desativa. local premio_vezes = 13 -- Caso ativo, a quantidade de conquista que o player tem, para ganhar PREMIO. local premio = 2472 -- ID do Premio local premio_cont = 1 -- Quantidade do Premio local premio_reset = 0 -- Resetar o contador do premio depois que atingir a meta?? (1) = SIM (0) = NAO -------FIM PREMIOs I N D I V I D U A L --------- ----------------- FIM DAS CONFIG ----------------- local sto_ativ = getGlobalStorageValue(storages[2]) position = getCreaturePosition(cid) if isPlayerGuild(cid) == TRUE then if sto_ativ == 1 or sto_ativ == -1 then guildname = getPlayerGuildName(cid) guild = getPlayerGuildId(cid) guild_sto = getGlobalStorageValue(storages[3]) if guild ~= guild_sto then setPlayerStorageValue(cid,guild_sto,guild) ----------------------------------------------------- if getPlayerStorageValue(cid,storages[1]) == -1 then setPlayerStorageValue(cid,storages[1],0) end ----------------------------------------------------- sto_vezes = getPlayerStorageValue(cid,storages[1]) setGlobalStorageValue(storages[3],getPlayerGuildId(cid)) setPlayerStorageValue(cid,storages[1], sto_vezes + 1) sto_vezes_total = getPlayerStorageValue(cid,storages[1]) doBroadcastMessage("O(a) "..getCreatureName(cid).." acabou de conquistar o castelo "..castle_two_name.." para a guild \""..guildname.."\" pela "..sto_vezes_total.."ª vez(s).", 22) doSendMagicEffect(position, 39) if premio_por_vezes == 1 then if getPlayerStorageValue(cid,storages[1]) == premio_vezes then if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doBroadcastMessage("O "..getCreatureName(cid).." ganhou uma(o) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!", 21) doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") ----------------------------------------------- -- if premio_reset == 1 then -- setPlayerStorageValue(cid,storages[1],0) -- Resetar a contagem end -- ----------------------------------------------- -- else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Vamos verificar novamente em 10 segundos!") addEvent(additem,10000,cid,premio,premio_cont,premio_reset) end end end else doPlayerSendCancel(cid,"Este castelo ja foi conquistado pela sua guild!") doSendMagicEffect(position, 2) end else doPlayerSendCancel(cid,"O sistema está desativado") end else doPlayerSendCancel(cid,"É nescessario ter guild para dominar o castelo!") doSendMagicEffect(position, 2) end end ------------------------- Por PC98. function additem(cid,premio,premio_cont,premio_reset) if getItemWeightById(premio,1) <= getPlayerFreeCap(cid) then doPlayerAddItem(cid, premio,premio_cont) doPlayerSendTextMessage(cid, 18, "Voce recebeu o(a) "..getItemNameById(premio).." como recompensa das suas "..premio_vezes.." conquistas!") if premio_reset == 1 then setPlayerStorageValue(cid,storages[1],0) end stopEvent(additem) else doPlayerSendTextMessage(cid, 18, "Voce nao tem capacidade para ganhar o item. Verificando novamente em 10 segundos!") addEvent(additem,10000,cid) end end ------------------------- por pc98 function isPlayerGuild(cid) if getPlayerGuildName(cid) ~= "" then return TRUE else return FALSE end end castledoor1.lua --------------- -----BY PC98------- --------------- function onUse(cid, item, frompos, item2, topos) -------------------------Config----------------------------------------------------------------- door_opened = 1228 -- ID da porta aberta storage_guild = getGlobalStorageValue(123123) -- A 3ª storage configurada em Castle.lua guarda_ativ = 1 -- Caso um invasor tente abrir a porta, sumonar o Monstro "Guarda"?? | (1) = SIM (0) = NAO guarda_cont = 2 -- Caso ativo: a quantidade de guardas a sumonar guarda_pos = {x=123,y=123,y=7} -- Posiçao a ser sumonada os guardas! -------------------------Fim de Config----------------------------------------------------------- if getPlayerGuildId(cid) == storage_guild then doTeleportThing(cid,getThingPos(item.uid)) doTransformItem(item.uid, door_opened) doPlayerSendTextMessage(cid, 22, "Seja bem vindo a vosso castelo!") return TRUE else if guarda_ativ == 1 then doPlayerSendTextMessage(cid, 22, "Guaaaardas, tirem esses invasores daqui!!") for i=1, guarda_cont do doSummonCreature("Guarda", guarda_pos) end return FALSE else doPlayerSendTextMessage(cid, 22, "Este castelo nao pertence a sua guild") return FALSE end end end castledoor2.lua --------------- -----BY PC98------- --------------- function onUse(cid, item, frompos, item2, topos) -------------------------Config----------------------------------------------------------------- door_opened = 1228 -- ID da porta aberta storage_guild = getGlobalStorageValue(321321) -- A 3ª storage configurada ( ja esta configurada o PADRAO ) guarda_ativ = 1 -- Caso um invasor tente abrir a porta, sumonar o Monstro "Guarda"?? | (1) = SIM (0) = NAO guarda_cont = 4 -- Caso ativo: a quantidade de guardas a sumonar guarda_pos = {x=321,y=321,y=7} -- Posiçao a ser sumonada os guardas! -------------------------Fim de Config----------------------------------------------------------- if getPlayerGuildId(cid) == storage_guild then doTeleportThing(cid,getThingPos(item.uid)) doTransformItem(item.uid, door_opened) doPlayerSendTextMessage(cid, 22, "Seja bem vindo a vosso castelo!") return TRUE else if guarda_ativ == 1 then doPlayerSendTextMessage(cid, 22, "Guaaaardas, tirem esses invasores daqui!!") for i=1, guarda_cont do doSummonCreature("Guarda", guarda_pos) end return FALSE else doPlayerSendTextMessage(cid, 22, "Este castelo nao pertence a sua guild") return FALSE end end end Talkactions Va na pasta Data/talkaction/talkactions.xml , clique com o botao direito e depois editar. Adicione esta linha: <talkaction words="/war" event="script" value="castlesystem.lua"/> Agora va na pasta scripts , e crie um arquivo lua chamado castlesystem.lua. castlesystem.lua function onSay(cid, words, param) access = 4 -- Coloque aqui o access requirido para Ativar/Desativar o sistema if param == "start" then if getPlayerAccess(cid) == access then setGlobalStorageValue(54321,1) doPlayerSendTextMessage(cid, 20, "Voce ativou o Castle Wars com suscesso!") return TRUE end elseif param == "stop" then if getPlayerAccess(cid) == access then setGlobalStorageValue(54321,2) doPlayerSendTextMessage(cid, 20, "Voce desativou o Castle Wars com suscesso!") return TRUE end end end Monster O mostro Guarda... aquele que eu disse que pode ficar dentro do castelo :] Instalaçao: va na pasta data/monsters e edite o arquivo Monster.xml , adicionando esta linha: <monster name="Guarda" file="guarda.xml"/> e depois crie um arquivo na mesma pasta chamado guarda.xml guarda.xml <?xml version="1.0"?> <monster name="Guarda" nameDescription="the guard" experience="6000" speed="268" race="Blood"> <health now="20000" max="20000"/> <look type="73" corpse="6080"/> <strategy attack="200" defense="300"/> <targetchange speed="420" chance="1"/> <flags> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag attackable="1"/> <flag pushable="0"/> <flag staticattack="90"/> <flag targetdistance="1"/> </flags> <attacks> <attack name="melee" interval="2000" chance="100" min="-400" max="-800" range="1"/> <attack name="physical" interval="4000" chance="25" min="-600" max="-700" range="7" radius="8" target="1"> <attribute key="shootEffect" value="arrow"/> </attack> </attacks> <defenses defense="45" armor="40"/> <immunities> <immunity name="paralyze"/> <immunity name="invisible"/> </immunities> <voices speed="2200" chance="75"> <voice sentence="Grrrrrrrrrr" yell="1"/> <voice sentence="Saia daqui intrusos!" yell="1"/> <voice sentence="Sua resistencia e inutil!" yell="1"/> <voice sentence="Voce vai ser preso!" yell="1"/> </voices> <script> <event name="guard"/> </script> <elements/> <loot/> </monster> Creatures Scripts Bom, agora a gente tem de configurar pra esse bixo nao atacar os donos do castelo neh, se nao ele vai sair porai matando GERAL . Vamo nessa. Va na pasta data/creaturescripts e edite o arquivo creaturescripts.xml adicionando esta linha: <event type="combat" name="guard" script="guard.lua"/> agora abra a pasta scripts, que esta na mesma pasta e crie um arquivo chamado guard.lua. guard.lua function onCombat(cid, target) if(not isPlayer(target)) then return TRUE else targets = getMonsterTargetList(cid) if getPlayerGuildId(target) == getGlobalStorageValue(123123) then addEvent(check,1000,cid,targets) return FALSE else return TRUE end end end function check(cid,targets) for i=1, #targets do if getPlayerGuildId(targets[i]) == getGlobalStorageValue(123123) then addEvent(check,1000,cid,targets) return FALSE else stopEvent(check) return TRUE end end end Esta configurado o Monstro! Vamos pra proxima etapa! Instalaçao no MapaEditor Va ate no primeiro castelo, e adicione uma lavanca ( id recomendado: 1945 ) e coloque aonde voce quiser. Depois de colocado a lavanca, clique nela com o botao direito do mouse e va em property. No campo "ActionID:" coloque 9999. Faça a mesma coisa com o segundo castelo, crie la a lavanca, e coloque actionID 8888. Se voce quiser voce pode criar uma porta especial, por onde so os 'donos' do castelo pode entrar, afinal, ja ta instalado! :fail: Coloque ActionID 9998 na porta no primeiro castelo, e actionID 8887 na porta do segundo castelo. Comandos /war start - Para Ativar o sistema ( ja vem ativado por padrao) /war stop - Para desativar o sistema. Bom, eh isso ai. Eh meu primeiro Script ( de muitos ) pro forum tibiaking, e espero ta ajudando o forum. Creditos: PC98 - Pelo script MonsterEditor - Pelo mosntro Guarda. ( blackdemon) obs: Esse mesmo script foi postado em outro forum, porem fui eu mesmo que postei ( PC98 - mesmo nick ). abraços! Ele funciona certinho,mas o problema é o /war stop,não funciona,sendo assim o castle fica ativado para sempre,se alguém souber como resolver me ajuda.Tentei falar com o auto to script,ele falou que não lembrava mais,e tals...Então é isso. Abraços.1 ponto -
[ACTION] Upgrade System
[ACTION] Upgrade System
ManoTobira reagiu a Alberess por uma resposta no tópico
1 pontoeae pessoal vim trazer esse script pro Tibia king e nao sei se voces vao gosta mais nao custa nada tenta agrada um sistema de refinamento usado em muitos ots,porém esse coloquei umas modificações e passei para portugês. Vamos lah... primeiro abra o bloco de notas e cole isso: Agora salve ele como upgrade.lua na pasta scripts agora em actions.xml adicione essa linha <action itemid="8306" script="upgrade.lua"/>[/font][/color] [color=#282828][font=helvetica, arial, sans-serif] e pronto seu script esta feito!!! mudanças: * Script atualizado para português * diminuido a chance de sucesso do upgrade(se nao todos no ot vai ter os itens fortes) * almentado os pontos que ganha quando o upgrade tem sucesso * almentado os pontos que perde quando o upgrade falha * em maxlvl = 10 , coloque qualquer numero que voce quizer espero que vocês gostem do novo script créditos 98% para Mock 2 % para min pelas mudanças. atualizado e antes de posta aki pedi permissao do Mock __________________________________________ Nao custa nada da +REP xD1 ponto -
[Talkaction] Comando para fazer o Pokemon Falar.
[Talkaction] Comando para fazer o Pokemon Falar.
Salazar Slytherin reagiu a principe sharingan por uma resposta no tópico
1 pontoFala ae falera do Tibia King, resolvi fazer uma Script para fazer o Pokemon Falar hehehe'.... Vamos lá: 1º -> Data/Talkaction/Script Faça um arquivo com o nome de pokemontalk.lua e Cola isso dentro: 2º Vá em Data/Talkaction E abra o Talkactions.xml e cole está tag dentro: Para fazer o pokemon falar o comando é: !x O QUE VOCÊ QUISER QUISE O POKEMON FALE !! Bom galera, é só isso msm !! Qualquer duvida comenta ae. Ajudei ? Rep + Não custa nada (:1 ponto -
Executavel 9.80/9.81
Executavel 9.80/9.81
Marcio Tadashi reagiu a zMaXiMoS por uma resposta no tópico
1 pontoSim eu tenho, o do PBOT 9.8 Full que tenho. Só estou mandando o executável, se precisar das dll, você tem meu skype e te passo ! Aqui o link: Vlw ! Quero meus +REP KKK !1 ponto -
[Duvida]
[Duvida]
TathiiCarvalho reagiu a zMaXiMoS por uma resposta no tópico
1 pontoApenas só tire dúvidas de scripts e outras coisas que esteja no TibiaKing. Esse tópico é muito grande, tem que fazer com calma se erra 1 letra ou número irá da erro na distro. Então verifique tudo denovo ou faça denovo com calma ! Ou então tente pegar esse script de algum ot que já tenha.1 ponto -
Combat fórmulas
Combat fórmulas
Agaka reagiu a MaXwEllDeN por uma resposta no tópico
1 pontoCriado por: Kaotar Testado e Baseado em: TFS 0.4_DEV Informações adicionais: Todo mundo já se deparou, quando foi modificar a sua spell, com a formula e não entendeu o que cada numero significava, irei explicar tudo o que necessitas nesse tópico. Hail, bom como já leram nas informações adicionais acima, estou aqui para explicar o que cada numero, na formulas de combat, significam. Formula: setCombatFormula(combat, type, mina, minb, maxa, maxb[, minl, maxl[, minm, maxm[, minc[, maxc]]]]) Como podem ver são varios os argumentos que passamos para essa função: para facilitar a explicação vou chama-los de forma diferente. Notem as cores, você pode escolher até que cor quer usar, você pode usar só os argumentos azuis, os azuis e os vermelhos ou todos. PS: Impossível usar apenas o vermelho ou apenas o marrom é obrigatório seguir a ordem. Vamos as explicações: Bom como não é obrigatório colocar os numero em vermelho, quando não é especificados esses números nas spells a formula pega eles do config.lua na parte. formulaLevel = 5.0 formulaMagic = 1.0 Sendo que: Mas e o i ,j? Explicando em outras palavas: i, j serão valores padrões para Minimo e Maximo, se eles forem menores que i, j então i, j que serão considerados.Exemplo: Se Minimo = 50, Maximo = 100, i = 60 e j = 80 então a formula vai ter o Minimo de 60 por causa que i substitui o Minimo, pois é maior Maximo vai ser 100, pois j é menor que o Maximo, então não substitui. Bom acho que isso vai facilitar a vida de muita gente, pois avia varias duvidas na seção de suporte sobre o assunto, então decidi fazer esse tópico. Alguma observações: Este tópico aplica-se apenas quando o tipo de formula é COMBAT_FORMULA_LEVELMAGIC; Está formula ainda tem sofre o adicional da vocação e dos equipamentos; Está formula foi retirada do TFS 0.4_DEV, e pode ter alterações em outras verções. Espero ter ajudado. TODO: Explicar outros tipos de formulas e mostrar outras formas de fazer isso. Lembrando: Não fui eu quem criou esse tutorial, foi o Kaotar, de outro fórum, eu só trouxe ele para o TibiaKing.1 ponto -
Patterns
Patterns
LeoTK reagiu a MaXwEllDeN por uma resposta no tópico
1 pontoPattern Pattern ("Padrão" em pt-br) é uma poderosa funcionalidade para manipulação de strings (caso você não saiba o que é uma "string", busque saber antes de continuar, recomendo também ter um certo domínio sobre a biblioteca string), e usada para buscar um padrão de texto pré-definido. Porque aprender ? Possui recursos indispensáveis quando se precisa trabalhar com strings, alta aplicabilidade em scripts direcionados a otserv (talkactions), não que se vá usar isso a todo o momento, mas é altamente recomendado que se saiba trabalhar com patterns, é extremamente útil as vezes. Funções Algumas funções da biblioteca padrão string que aceitam pattern em seus parâmetros: string.find(string, pattern) – Procura a primeira instância da pattern na string string.gfind(string, pattern) – Quando for chamada repetidamente, retorna cada instância da pattern na string string.gsub(string, pattern, replace) – Retorna uma string em que todas as instâncias da pattern foram substituidas por replace string.match(string, pattern, init) – Retorna uma lista de ocorrências da pattern na string, começando em init (1 significa o primeiro caractere da string, 2 o segundo, assim por diante) Conjuntos Quando se constrói uma pattern, se utiliza alguns caracteres, cada um representando um conjunto diferente: (onde "x" não é um caractere mágico ^$()%.[]*+-?) → Representa o caractere "x" mesmo; . → Representa todos os caracteres; %a → Representa todas as letras; %c → Representa todos os caracteres de controle; %d → Representa todos os dígitos; %l → Representa todas as letras minusculas; %p → Representa todos os caracteres de pontuação; %s → Representa todos os caracteres de espaço; %u → Representa todas as letras maiúsculas; %w → Representa todos os caracteres alfanuméricos; %x → Representa todos os dígitos hexadecimais; %z → Representa o caractere com a representação do 0 (zero). Ao usar zeros na pattern ela não irá funciona, use esta nesse caso; Ao usar letra maiúscula, isso faz representar o contrário (Exemplo: %A → Representa tudo que não for letras; %D → Representa tudo que não for um digito; assim por diante...). Como dito anteriormente, para se criar uma pattern é necessário utilizar esses conjuntos, uma pattern é feita de uma sequência desses conjuntos. Se você quisesse criar uma pattern para encontrar uma certa string em um texto, por exemplo, para encontrar os números da string "23otserv", você teria que usar esta pattern "%d%dotserv", assim você estaria definindo que quer os numeros que estão ao lado da palavra ‘otserv’. Mas e se tivesse que encontrar um numero com 10 "casas" ? Por isso existe os modificadores, para evitar essa repetição desnecessária. Modificadores Servem principalmente para poupar serviço e são quatro, entenda 'x' como sendo algum conjunto (%a, %c, %d, ...): x* → Retorna 0 ou mais repetições do conjunto x. Sempre retornará a maior cadeia possível encontrada; x+ → Retorna 1 ou mais repetições do conjunto x. Sempre retornará a maior cadeia possível encontrada; x- → Retorna 0 ou mais repetições do conjunto x. Sempre retornará a menor cadeia possível encontrada; x? → Retorna 0 ou 1 ocorrência de x; Elementos especiais Existe também quatro elementos especiais: %n → Sendo n um numero entre 1 e 9, busca a enésima captura (apenas vi sendo usada na função string.gsub); %bxy → Procura uma string que inicia com x e termina com y; ^ → Quando está no começo da pattern, força a pattern a ser encontrada no começo da string; $ → Quando está no final da pattern, força a pattern a ser encontrada no fim da string; Nota: Se ^ ou $ estiverem em outros lugares da pattern, não fazem nada, apenas representam eles mesmos. Construindo uma pattern Vamos construir algumas patterns com os elementos citados acima. Primeiro alguns exemplos e depois uma explicação mais detalhada de cada elemento da pattern: String para as patterns: "Exemplo lua de pattern lua feito em lua" exemplos toscos, a gente se vê por aqui Pattern: (%a+) lua Capturaria: Exemplo lua de pattern lua feito em lua Ele só retornará o primeiro caso que corresponder com a pattern. Agora, ao invés de usar o "%a" fosse usado o "." (que captura tudo), aconteceria isso: Pattern: (.+) lua Capturaria: Exemplo lua de pattern lua feito em lua Como "%a" captura apenas letras e não o "espaço", foi por isso que no primeiro exemplo só capturou a palavra "Exemplo" e no segundo exemplo, como foi usado o "." que captura tudo, capturou uma parte maior (ai que vêm a parte do modificador) por causa do modificador "+" que sempre vai buscar a maior cadeia possivel, agora veja um exemplo usando o "-": Pattern: (.-) lua Capturaria: Exemplo lua de pattern lua feito em lua O modificador "-", como dito anteriormente, captura a menor cadeia e por isso capturaria apenas o "Exemplo". Todos os modificadores são importantes. Um exemplo maior: Pattern: (%a+) lua (.-) lua (.+) Capturaria: Exemplo lua de pattern lua feito em lua Para quem não entendeu Explicação passo a passo: (%d+) Captura → O parenteses define que você quer que retorne essa captura. Conjunto → No caso é o de digitos. Modificador → No caso mostra que é para obter a maior cadeia possivel com 1 ou mais repetições do conjunto. Um exemplo mais avançado Agora usando de exemplo a pattern da função string.trim, que remove os espaços em branco do lado esquerdo e direito da string. function string.trim(str) -- Function by Colandus return (string.gsub(str, "^%s*(.-)%s*$", "%1")) end string.gsub(str, "^%s*(.-)%s*$", "%1") str → Uma string qualquer; ^ → Força o começo da pattern ser encontrada no começo de str; %s* → Conjunto de espaços, podendo ter 0 ou mais repetições; (.-) → A captura principal, a que vai ser retornada, podendo ser digitos, letras, espaço, etc; $ → Força o final da pattern ser encontrada no fim de str; %1 → Retorna a 1ª captura da pattern e usa como parametro da função (Esse é um dos elementos especiais, %n); Dessa forma será removido os espaços apenas no começo e no fim da string ! Complemento Depois de dominar e entender como funciona as patterns, vamos aplica-las em funções, vou mostrar um exemplo de cada função (as que foram citadas no começo). string.find: init, end, case1, case2 = string.find("minha string123", "(%a+) (.+)") init → Onde inicia a captura encontrada (nesse caso, init = 1); end → Onde termina a captura encontrada (end = 15); case1 → Primeira captura que equivale a pattern (%a+) (case1 = minha); case2 → Segunda captura que equivale a pattern (.+) (case2 = string123); string.gfind: for occ in string.gfind("a1a2a3a4a5", "(%a%d)") do print(occ) end occ → Terá um valor para cada instância da pattern (%a%d) encontrada, então irá printar a1, a2, a3, a4 e a5. string.match: case1, case2 = string.match("Eu tenho 50 reais", "(%d+) (%a+)") case1 → Primeira captura que equivale a pattern (%d+) (case1 = 50); case2 → Segunda captura que equivale a pattern (%a+) (case2 = reais); Referência http://www.lua.org/manual/5.1/pt/manual.html#5.4.1 http://lua-users.org/wiki/PatternsTutorial Então é isso, espero ter sido o mais claro possivel, Qualquer dúvida, erro ou sugestão, poste !1 ponto -
Evento Labirinto
Evento Labirinto
ManoTobira reagiu a Skyligh por uma resposta no tópico
1 pontoIae , galera hoje trago um script meio diferente Um De Evento De Labirinto Irei Explicar O Evento Pra Quem Nao Sabe agora vamos ao script va em data / movements / scripts / ponha o nome de algum arquivo para labirinto.lua e adicione la function onStepIn(cid, item, pos) pos ={x=160, y=54, z=7} -- pos que o player vai voltar se n for lvl 50 if isPlayer(cid) then if getPlayerLevel(cid) == 40 then -- ponha o numero que vai passar pelo piso doTeleportThing(cid,pos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você Nao E Lvl 40") end return true end end dps em movements.xml <movevent type="StepIn" uniqueid="4710" event="script" value="labirinto.lua"/> agora em data / talkactions / scripts / e ponha o nome de algum arquivo para labirinto.lua function onSay(cid, words, param) local pos = {x=1017 , y=1020 , z=7} -- onde o item sera removido local pos = {x=1017 , y=1021 , z=7} -- onde o item sera removido local pos = {x=1017 , y=1022 , z=7} -- onde o item sera removido if words=="!openevento" then broadcastMessage("Evento De Labirinto Esta Aberto" , 22) return TRUE end if words=="!closeevento" then doRemoveItem(getThingfromPos(pos).uid,1) end return TRUE end dps em talkactions.xml <talkaction log="no" words="!closeevento;!openevento" access="5" event="script" value="labirinto.lua"/> Download do map http://speedy.sh/r9xUu/labirinto.otbm Print do map Créditos Skyligh 80 % (Por criar o script do movements e edita o talkaction , ideia , mapa) smartbox 20 % (por criar o do talkaction) Gostou ? rep+1 ponto